构造函数和析构函数
一、构造函数: 类名(形参表)
1、普通构造函数:在对象被创建时利用特定的值构造对象,将对象初始化到一个特定的状态。
特性:构造函数的函数名和类名相同;没有返回值;在对象被创建时被自动调用;如果有构造函数,建立对象时必须给出初始值。
2、复制构造函数(特殊的构造函数)(类名(类名&对象名))
复制构造函数和赋值运算符的行为差不多,都是将一个对象的值复制给另一个对象;但是复制构造函数是使用一个已经存在的对象去初始化一个同类的新对象而赋值运算符是把对象的值复制给一个已经存在的变量。
复制构造函数在以下三种情况下会被调用:1)用类的一个对象去初始化该类的另一个对象2)如果函数的形参是类的对象,调用函数时,进行形参和实参结合时3)函数的返回值是类的对象,函数执行完成返回调用者时。
下面是一个完整覆盖了这三种情况的程序
#include<iostream>
using namespace std;
class point{
public:
point(int xx=0, int yy=0)
{
x=xx;
y=yy;
}
point(point &p);
int getx()
{
return x;
}
int gety()
{
return y;
}
private:
int x,y;
};
point::point(point&p)
{
x=p.x;
y=p.y;
cout<<"Calling the copy constructor"<<endl;
}
void fun1(point p)
{
cout<<p.getx()<<endl;
}
point fun2()
{
point a(1,2);
return a;
}
int main()
{
point a(4,5);
point b=a;
cout<<b.getx()<<endl;
fun1(b);
b=fun2();
cout<<b.getx()<<endl;
return 0;
}
复制构造函数还可以有选择有变化的复制,可以将复制构造函数可以构造一个与初始点有一定位移的新点(这个我有时间会尝试着写一下)
二、析构函数(作用几乎和构造函数正好相反)
用来完成对象被删除前的清理工作
在对象的生存期即将结束时自动调用;名称由类名前面加“~”构成;没有返回值;不接收任何参数