文章目录
一、构造函数
- 什么是构造函数: 是指在 对象 被创建的时侯,利用特定的值去构造对象,将对象初始化为一个特 定的状态。
- 构造函数的性质:
(1) 构造函数的函数名和类的名字保持一致,并且没有返回值。
(2) 构造函数通常被声明为公有函数。
(3) 如果自己不显示的写出构造函数,系统会默认生成一个无参的构造函数,在对象被创建的时候自动调用,这个构造函数不会去做任何事情,只是C++的规定对象被创建的时候一定会有构造函数的调用。
(4) 构造函数可以重载。
注意:构造函数是在对象被创建的时候自动调用。
二、复制构造函数
- 什么是复制构造函数: 用于已有对象的数据成员的数值复制。
- 特点:
(1) 形参是本类的对象的引用
(2) 作用在于使得一个已经存在的对象(由复制构造函数的参数指定),去初始化同类的一个新对象。 - 复制构造函数被调用的三种情况:
(1)当用一个类的对象,去初始化另外一个对象。
代码示例:
class Point
{
public:
Point(int xx,int yy); //构造函数
Point(Point &p); //赋值构造函数,注意形参是本类对象的引用。
int getX() { return x; }
int getY() { return y; } //写成了内联函数的形式
private:
int x,y;
};
Point::Point(int xx,int yy)
{
x = xx;
y = yy;
}
Point::Point(Point &p)
{
x = p.x;
y = p.y;
cout << "调用了复制构造函数" << endl;
}
int main()
{
Point a(3, 4);
Point b(a); //传递a的引用,调用一次复制构造函数
Point c = a; //再次调用,和b(a)方式一样;
//测试:
cout << "b的x: "<<b.getX() << endl;
cout << "c的x: "<<c.getX() << endl;
}
结果:
调用了复制构造函数
调用了复制构造函数
b的x: 3
c的x: 3
(2)函数的形参是类的对象的时候,调用函数进行形实结合的时候
void f(Point p)
{
cout << p.getX() << endl;
}
f(a); //调用一次复制构造函数
结果:
调用了复制构造函数
3
注意这种情况: 只有在对象进行值传递的时候会进行调用复制构造函数,引用传递不会调用。
(3) 函数的返回值为类的对象的时候,函数执行结束返回调用者时
代码:
//函数的返回值是类的对象
Point g()
{
Point a(50, 100);
return a;
}
注意:
- 不是所有编译器都会针对这三种情况调用,根据编译器的差异,结果会有不同,第三种情况,我实验了一下,就没有调用。
- 默认的复制构造函数(系统自动生成的),实现的只是浅复制,要实现真正的深复制,必须要自己编写复制构造函数
三、析构函数
- 什么是析构函数: 和构造函数作用几乎正好相反,用来完成一些程序即将结束的清除性的工作。
- 特点:
(1)析构函数是在对象的生存期即将结束的时刻被系统自动调用的。
(2)无返回值,不接受任何参数,但可以是虚函数。
参考书籍:C++语言程序设计第四版(郑莉,董渊,何江舟)