两道常见面试题测试程序

来源:互联网 发布:js单例模式 编辑:程序博客网 时间:2024/06/06 12:28
class String{public:String(const char* str);String(const String &other);~String();String& operator = (const String &other);void print();private:char* m_data;};String::String(const char* str){if(str == NULL){m_data = new char;m_data[0] = '\0';}else{m_data = new char[strlen(str)+1];memset(m_data,0,strlen(str)+1);strcpy(m_data,str);}};String::String(const String &other){m_data = new char[strlen(other.m_data)+1];memset(m_data,0,strlen(other.m_data)+1);strcpy(m_data,other.m_data);//other.m_data[strlen(other.m_data)] = 'I';};String::~String(){if(m_data != NULL)delete[] m_data;m_data = NULL;}String& String::operator = (const String &other){if(this == &other)return * this;if(m_data != NULL){delete[] m_data;m_data = NULL;}m_data = new char[strlen(other.m_data)+1];memset(m_data,0,strlen(other.m_data)+1);strcpy(m_data,other.m_data);return * this;}void String::print(){cout<<this<<endl;cout<<&(this->m_data)<<endl;cout<<this->m_data<<endl;char**p = &(this->m_data);cout<<*p<<endl;}class CA{public:CA(){m_nCount++;print();}/*CA(CA&a){m_nCount++;print();}*/~CA(){m_nCount--;print();}void print(){cout<<"m_nCount="<<m_nCount<<endl;};//private:static int m_nCount;};int CA::m_nCount = 0;void print(CA a){cout<<"m_nCount="<<a.m_nCount<<endl;}int main(int argc, char* argv[]){String str("1234567");String str2(str);cout<<sizeof(str2)<<endl;str2.print();CA *p = new CA;print(*p);delete p;system("pause");return 0;}


类对象的内存地址跟数据成员的起始地址是一致的。

注意点

1题,类可以使用本类对象的私有成员。

2题主要是注意,使用默认拷贝构造函数带来的影响。


//私有构造函数class CB{friend CB* CreateObjectEx();private:CB(){print("CB()");}public:~CB(){print("~CB()");}void print(const char* strInfo){cout<<strInfo<<endl;};//static函数创建对象static CB* CreateObject(){return new CB;}};//友元创建对象CB* CreateObjectEx(){return new CB;};


原创粉丝点击