关于String一个面试经典问题,偶就被卡在那里,面试失败了.
class String
{
public:
String(const char *str=NULL)//普通的构造函数
{
if(str==NULL)//不是给m_data=NULL,而是要m_data给一个'\0'这样终结符
{
m_data=new char [1];
m_data='\0';
}
else
{
m_data=new char[strlen(str)+1];
//不能用这个来取代,因为
strcpy(m_data,str);
/*
要用下面这一段,来取代strcpy,
特别要注意m_data起始地址的保存
char *temp=m_data;
while((*m_data++=*str++)!='\0');
m_data='\0';
m_data=temp;
temp=NULL;
*/
}
}
String(const String &other)//拷贝构造函数
{
int length=strlen(other.m_data);
m_data=new char[length+1];
if(NULL==m_data)//用于判断内存是否分配成功
{
cout<<"内存分配失败!"<<endl;
}
else
{
strcpy(m_data,other.m_data);
}
//exit(1);
}
~String(void); //析构函数
//String& operate =(const String &other);//赋值函数
char *My_Mdata()
{
return m_data;
}
private:
char *m_data;
};
String::~String()
{
delete []m_data;//改成delete m_data;因为m_data不是数组指针
//m_data=NULL;
}
//为什么 m_data 是private ,但是String(const String &other)//拷贝构造函数
//int length=strlen(other.m_data);//这里other.m_data却是之间调用,难道private 不起作用了?