//类的构造函数使用规则 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; class PointA{ }; class PointB{ public: PointB(int _a, int _b, const char *pin/*in*/){ x = _a; y = _b; remark = (char *)malloc(sizeof(char)*(strlen(pin) + 1)); strcpy(remark, pin); cout << "我是自定义的有参构造函数4" << endl; } private: int x; int y; char *remark; }; class PointC{ public: PointC(PointC &pm){ cout << "我是自定义的拷贝构造函数3" << endl; //修改拷贝构造函数 x = pm.x; y = pm.y; //remark = pm.remark; 这句话错误 //修改后的方案 remark = (char *)malloc(sizeof(char)*(strlen(pm.remark) + 1)); strcpy(remark, pm.remark); } private: int x; int y; char *remark; }; void ProtectA(){ PointA p1;//调用默认无参构造函数 PointA p2=p1;//调用默认拷贝构造函数 //结论①:当类中没有定义任何一个构造函数时,c++编译器会提供无参构造函数和拷贝构造函数 //PointB p3; //报错: error C2512: “PointB”: 没有合适的默认构造函数可用 PointB p4(3,3,"455");//调用自定义有参构造函数 PointB p5 = p4;//调用默认拷贝构造函数 //结论②:当类中定义了任意的非拷贝构造函数(无参,有参),c++编译器不会提供无参构造函数, //但是如果类中也没有定义任意的拷贝函数,那么c++编译器还是会提供默认拷贝构造函数 //PointC p6; //报错 error C2512: “PointC”: 没有合适的默认构造函数可用 //结论③:当类中定义了拷贝函数时,c++编译器不会提供默认的无参构造函数 //结论④:默认拷贝构造函数只是类成员变量间的简单赋值(详情参考类的浅拷贝) } void main(){ system("pause"); }
时间: 2024-10-19 22:23:52