C++:构造函数,拷贝构造函数,析构函数
构造函数通过传入的参数来初始化自定义类型函数如以下基础构造函数#include iostream#include stringusing namespace std;class NN{public:NN(int q0, int w0, int e0){this-a q;this-b w;this-c e;}int A();int B();int C();private:int a;int b;int c;};int NN::A(){return a;}int NN::B(){return b;}int NN::C(){return c;}int main(){NN aa;//当不传参时括号则不用写会直接调用默认参数构造NN bb(13);//函数传参时会根据从左至右的原则传参不可跳跃传参如NN bb(12,,13)则会报错NN cc(13, 14);//传入的参数会依次覆盖默认的参数从而达到全缺省构造NN dd(13, 14, 520);cout aa.A() aa.B() aa.C()endl;//不能直接使用NN类型的参数如aa.a aa.bcout bb.A() bb.B() bb.C()endl;//原因在于a,b,c属于NN类型的私有参数无法直接用cout cc.A() cc.B() cc.C()endl;cout dd.A() dd.B() dd.C()endl;return 0;}输出析构函数C中规定对象在销毁时会自动调用析构函数完成对象资源的清理释放工作特点1.无参数 无返回值void也不要2.一个类只能有一个析构函数诺无显式定义析构函数系统默认生成3.对象在销毁时会自动调用析构函数4.当对象没有申请资源如无malloc,realloc等时析构函数不用写有则一定要写。如拷贝构造函数是一种特殊的构造函数用一个已经初始化的函数来初始化另一个相同类函数是构造函数的重载语法格式例如class Date{public:Date(int a,string b){this-aa;this-bb;}Date(count Data b1)//C中拷贝构造函数的第一给参数必须是类类型对象的引用{ //参数加count可防止传入的类类型对象的引用改变this-ab1.a; //防止改变b1原本的类this-bb1.b;}privateint a;string b:}int main(){Date B1(20,kskbl);Date B2B1;Data B3(B1);//两种方式都可以}在无显式定义拷贝构造函数时编译器会自动生成默认拷贝构造函数即在上述代码中诺无Date(count Data b1)后续代码也能正常编译此时调用的就是默认拷贝构造函数默认拷贝构造函数是对传入类的浅拷贝浅拷贝:特点1. 只复制对象本身不复制对象指向的堆内存资源2. 新旧对象的指针成员指向同一块内存地址3. 内存开销小复制速度快4. 存在双重释放风险析构时多次释放同一内存5. 存在悬挂指针问题一个对象修改会影响另一个6. 默认拷贝构造函数和赋值运算符执行浅拷贝则可知在对有资源申请的类类型函数进行拷贝构造时一定要进行显示定义避免编译报错反之可不写个人建议能行则写结语新手写博客有不妥之处请直接指出感觉有帮助的话请点赞支持一下吧感谢