頭文件
#pragma once
class TestString
{
public:
TestString(void);
~TestString(void);
public:
TestString(const char * str = NULL);
TestString(const TestString &other);
TestString &operator = (const TestString &other);
private:
char *m_data;
};
實現文件
#include "StdAfx.h"
#include "TestString.h"
#include <string.h>
TestString::TestString(void)
{
}
TestString::~TestString(void)
{
delete []m_data;
}
TestString::TestString(const char * str)
{
if (str == NULL)
{
m_data = new char[1];
m_data = "";
}
else
{
m_data = new char[strlen(str) + 1];
strcpy_s(m_data, strlen(str) + 1, str);
}
}
TestString::TestString(const TestString &other)
{
m_data = new char[strlen(other.m_data) + 1];
strcpy_s(m_data, strlen(other.m_data) + 1, other.m_data);
}
TestString & TestString::operator = (const TestString &other)
{
/自賦值
if (this == &other)
{
return *this;
}
delete []m_data;
m_data = new char[strlen(other.m_data) + 1];
strcpy_s(m_data, strlen(other.m_data) + 1, other.m_data);
return *this;
}
調用測試
char sztest[] = "abcd";
char sztest2[] = "abcde";
TestString str(sztest);
TestString str2(sztest2);
TestString str3(void); //這里有警告,未調用原型函數(是否是有意用變量定義的?)
str2 = sztest;
str3 = sztest; //錯誤,表達式必須是可修改的左值
當把str3 = sztest;注釋,依然會有警告
1.指定了多個默認構造函數
2.未調用原型函數(是否是有意用變量定義的?)
對於第二點警告:TestString str3(void);編譯無法識別調用的是TestString(void)與TestString(const char * str = NULL)
對於第一點警告:TestString(void);和TestString(const char * str = NULL);是否等同