C/C++教程

C++学习笔记:构造函数和析构函数(重要)

本文主要是介绍C++学习笔记:构造函数和析构函数(重要),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 一、构造函数
  • 二、复制构造函数
  • 三、析构函数


一、构造函数

  1. 什么是构造函数: 是指在 对象 被创建的时侯,利用特定的值去构造对象,将对象初始化为一个特 定的状态。
  2. 构造函数的性质:
    (1) 构造函数的函数名和类的名字保持一致,并且没有返回值。
    (2) 构造函数通常被声明为公有函数。
    (3) 如果自己不显示的写出构造函数,系统会默认生成一个无参的构造函数,在对象被创建的时候自动调用,这个构造函数不会去做任何事情,只是C++的规定对象被创建的时候一定会有构造函数的调用。
    (4) 构造函数可以重载。
    注意:构造函数是在对象被创建的时候自动调用。

二、复制构造函数

  1. 什么是复制构造函数: 用于已有对象的数据成员的数值复制。
  2. 特点:
    (1) 形参是本类的对象的引用
    (2) 作用在于使得一个已经存在的对象(由复制构造函数的参数指定),去初始化同类的一个新对象。
  3. 复制构造函数被调用的三种情况:
    (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. 默认的复制构造函数(系统自动生成的),实现的只是浅复制,要实现真正的深复制,必须要自己编写复制构造函数

三、析构函数

  1. 什么是析构函数: 和构造函数作用几乎正好相反,用来完成一些程序即将结束的清除性的工作。
  2. 特点:
    (1)析构函数是在对象的生存期即将结束的时刻被系统自动调用的。
    (2)无返回值,不接受任何参数,但可以是虚函数。

参考书籍:C++语言程序设计第四版(郑莉,董渊,何江舟)

这篇关于C++学习笔记:构造函数和析构函数(重要)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!