c++类的四种构造函数和析构函数(注.实例Boy类)
c++类的四种构造函数和析构函数(注.实例:Boy类)
一。提要
1.构造函数的作用初始化对象的数据成员(仅c11新标准支持类内初始化)类内初始化较为单一,不能满足复杂多变的实际要求。
2.创建一个对象时就会调用构造函数,在对象销毁前(大括号是作用域)会自动调用析构函数(释放构造函数分配的动态的动态内存空间)【不能自己手动调用构造函数和析构函数】
3.没有定义构造函数和析构函数就会调用编译器合成的构造函数和合成的析构函数【合成的构造函数(默认构造函数)和析构函数没有作用】
4.构造函数和析构函数有自定义的构造函数和析构函数和编译器自动生成的构造函数和析构函数.
Boy类的数据成员:
Boy类打印对象信息的接口:
二·四种自定义构造函数和析构函数长什么样,怎么使用
1.自定义的默认构造函数
1.自定义的默认构造函数的声明:
2.自定义的默认构造函数的定义:
3.自定义的默认构造函数在main.cpp中的使用和它的打印信息:
2.自定义的重载构造函数(带参数的)
1.自定义的重载构造函数的声明:
2.自定义的重载构造函数的定义:
3.自定义的重载构造函数在main.cpp中的使用和它的打印信息:
3自定义的拷贝构造函数
1.自定义的拷贝构造函数的声明:
2.自定义的拷贝构造函数的定义:
3.自定义的拷贝构造函数在main.cpp中的使用和它的打印信息:
4.自定义的赋值构造函数
1.自定义的赋值构造函数的声明:
operator=是一个运算符函数 ,运算符重载以后再说 自定义的赋值构造函数是唯一有函数返回值的
2.自定义的赋值构造函数的定义:
3.自定义的赋值构造函数在main.cpp中的使用和它的打印信息:
5.自定义的析构函数
1.析构函数的声明:
2.析构函数的定义:
三.注意事项:
拷贝构造函数和赋值构造函数的区别:
在对象初始化时把另一个对象的数据成员赋值给对象 称为拷贝构造函数,如:
Boy boy1(“man”,20,7000);
Boy boy = boy1;
对象已经创建完毕时把另一个对象的数据成员赋值给对象 称为赋值构造函数 如:
Boy boy,boy1(“jack”,19,6000);
boy = boy1;
拷贝构造函数和赋值构造函数的注意事项:
operator=(const Boy& boy)中boy,使用引用,(避免不必要的麻烦)
而Boy(const Boy& boy)中的boy,必须使用引用;
赋值构造函数的返回值是为了避免链式赋值如:
Boy boy1,boy2,boy3;
boy1=b2=boy3;
如果确定没有链式赋值也可以用void类型;
拷贝构造函数和赋值构造函数不定义也可以完成,数据成员有指针时必须自己定义
否则牵扯到深拷贝和浅拷贝的问题.
如果定义了一个构造函数编译器就不会自动生成合成的默认构造函数
提醒:尽量使用自定义的构造函数和析构函数[如果没有动态内存要释放可以不定义]
初学编程的朋友一定要从用户的角度转换到程序员的角度 我还在挣扎.
今日总结:
好吧,不是今天的总结,是我临时写的, 老师说让写博客,我就随便写了写,凑合着看吧!
第一天写博客 ,做个纪念!