类的三大成员函数
- 构造函数
- 复制构造函数
- 析构函数构造函数
定义:
“构造函数”是一类特殊的成员函数,其名字和类的名字一样,并且不写返回值类型(void 也不写)。也成重载构造函数。
语法:
lass {public:(参数表);//...(还可以声明其它成员函数)};::(参数表){//函数体
目的:
自动初始化对象的数据成员。
全局对象和静态对象的构造函数在main()函数执行之前就被调用,局部静态对象的构造函数是当程序第一次执行到相应语句时才被调用。
然而给出一个外部对象的引用性声明时,并不调用相应的构造函数,因为这个外部对象只是引用在其他地方声明的对象,并没有真正地创建一个对象。
特点:
- 构造函数可以被重载,即一个类可以有多个构造函数。
- 构造函数执行时,对象的内存空间已经分配,构造函数的作用是初始化这片空间。
- 无参构造函数,不论是编译器自动生成的,还是程序员写的,都称为默认构造函数(default constructor)
实例: 使用构造函数进行初始化
#includeusing namespace std;/*定义声明Person类*/class Person{public: Person();Person(short Age);short Age;short getAge();};/*在默认构造函数中初始化*/Person::Person{Age =23;}/*在带参数的构造函数中初始化*/Person:Person(short Age){Age=Age;}/*在main函数中输出类的成员值*/void main(){Person p ; //实例化对象pcout<
复制构造函数
定义:
复制构造函数就是函数的参数是一个已经初始化的类对象,也称拷贝构造函数。
大多数情况下,其作用是实现从源对象到目标对象逐个字节的复制。编译器自动生成的复制构造函数称为“默认复制构造函数”。
应用场景:
在开发程序时可能需要保存对象的副本,以便在后面执行的过程中恢复对象的状态。对象以值传递的方式传入传出函数体时对象需要通过另一个对象进行初始化
特点:
复制构造函数的参数可以是 const 引用,也可以是非 const 引用。复制构造函数只有一个参数,参数类型是本类的引用。默认构造函数(即无参构造函数)不一定存在,但是复制构造函数总是会存在。
实例: 使用复制构造函数
#includeusing namespace std;class Person{public:Person(short Age); //带参构造函数Person(Person & c); //复制构造函数short Age;short getAge();};/*在带参数的构造函数中初始化*/Person:Person(short Age){Age=Age;}/*复制构造函数*/Person::Person(Person&c){Age =c.Age;}short Person::getAge(){return Age;}void main(){Person p1(23);Person p2(p1);cout<
析构函数
定义:
析构函数(destructor) 与构造函数相反,当对象结束其生命周期,如对象所在的函数已调用完毕时,系统自动执行析构函数。
作用:
对象消亡时,自动调用析构函数,释放对象使用的资源,并销毁非static成员。
语法:
class { public: ~(); //析构函数};::~(){ //函数体}
特点:
名字与类名相同,唯一区别在名字前加了一个"~";无参数(void),无返回值(return);一个类最多只有一个析构函数,不显示定义析构函数会调用缺省析构函数;析构函数不能重载。每调用一次构造函数,就会调用一次析构函数。
实例:使用析构函数
#include #includeusing namespace std ;class Person{public:Person(); //构造函数~Person();//析构函数char* M; //成员变量void ShowSM(); //成员函数void ShowFM(); //成员函数};Person::Person{M = new char [2048];}void Person::ShowSM(){strcpy(M,"Welcome to the Yun jianfeng's Homepage!");cout<
注(析构函数和构造函数的调用环境):
1.自动变量的作用域是某个模块,当此模块被激活时,自动变量调用构造函数,当退出此模块时,会调用析构函数。2.全局变量在进入main函数之前会调用构造函数,在程序终止时会调用析构函数。3.动态分配的对象在使用new为对象分配内存时会调用构造函数;使用delete删除对象调时会调用析构函数。4.临时变量是为支持计算,由编译器自动产生的。临时变量的生存期的开始和结尾会调用构造函数和析构函数。
本文部分内容参考至网络,如有错误,敬请指正,如有侵权,请联系修改。