构造函数与析构函数

29次阅读

共计 694 个字符,预计需要花费 2 分钟才能阅读完成。

构造函数和析构函数:

默认情况下编译器给一个类添加三个函数:

1. 默认构造函数(无参,函数体为空)2. 默认析构函数(无参,函数体为空)3. 默认拷贝构造函数,对成员属性进行拷贝
class car{
    int car_size;
    car(){cout<<“默认构造函数”<< endl;}
    car(int size){
        car_size=size;
        cout<<“有参构造函数”<< endl;
    }
    car(const car &p){
        car_size=p.car_size
        cout<<“拷贝构造函数”<< endl;
    }
    ~car(){cout<<“析构函数”<< endl;}
}

②(一)构造函数 :可分为有参构造函数 / 无参构造函数(或拷贝构造函数 / 其他构造函数)
调用规则 :如果用户自定义有参构造,系统不再提供默认无参构造,但提供拷贝构造。如果用户自定义拷贝构造,系统在提供其他构造和函数。
(二) 拷贝构造函数:使用时机
1. 使用一个已经创建完毕的对象来初始化一个新对象;
2. 以值传递的方式给函数参数传值;

实际应用举例:

car C;  // 默认构造函
car C1=10;  // 有参构造函数
car C2= C;  // 拷贝构造函数

继承中的构造函数

  • 继承基类构造函数
    (1)using A::A; 继承所有基类 ctor
    (2)不能仅继承指定的某个基类 ctor

  • 调用继承的构造函数
struct A {A(int i) {} // 有参构造函数一
    A(double d, int i) {}  // 有参构造函数二};

struct B : A {  // C++11
    using A::A; // 继承基类所有构造函数
    int d{0};   // 就地初始化
};

int main() {B b(1);   // 调用有参构造函数一 A(int i)
}

正文完
 0