#include <iostream>
#include <cstring>
using namespace std;
class ClassTest
{
public:
ClassTest()
{
c[0] = '\0';
cout<<"ClassTest()"<<endl;
}
ClassTest& operator=(const ClassTest &ct)
{
strcpy(c, ct.c);
cout<<"ClassTest& operator=(const ClassTest &ct)"<<endl;
return *this;
}
ClassTest(const char *pc)
{
strcpy(c, pc);
cout<<"ClassTest (const char *pc)"<<endl;
}
// private:
ClassTest(const ClassTest& ct)
{
strcpy(c, ct.c);
cout<<"ClassTest(const ClassTest& ct)"<<endl;
}
private:
char c[256];
};
int main()
{
cout<<"ct1: ";
ClassTest ct1("ab");
cout<<"ct2: ";
ClassTest ct2 = "ab";
cout<<"ct3: ";
ClassTest ct3 = ct1;
cout<<"ct4: ";
ClassTest ct4(ct1);
cout<<"ct5: ";
ClassTest ct5 = ClassTest();
cout << "ct6: ";
ClassTest ct6;
ct6 = ct5;
return 0;
}
结果:
结论(个人理解):
1、在一行的为初始化操作,在两行的为赋值操作,如ct6。
2、初始化时有拷贝和构造的概念,赋值时理解成调用赋值运算符。
2、初始化时看看需不需要构造,需要构造则调用构造函数,初始化时看看是否发生拷贝,发生拷贝不一定调用拷贝构造函数,此时还要看一下是否发生构造,若发生构造则只调用构造函数,因为拷贝构造被编译器优化掉了。