gpt4 book ai didi

c++ - c++中继承的构造函数

转载 作者:行者123 更新时间:2023-11-30 05:45:18 26 4
gpt4 key购买 nike

Excerpt from here:

Constructors are different from other class methods in that they create new objects, whereas other methods are invoked by existing objects. This is one reason constructors aren’t inherited. Inheritance means a derived object can use a base-class method, but, in the case of constructors, the object doesn’t exist until after the constructor has done its work.

  1. 构造函数是创建新对象还是当对象被调用时立即调用构造函数?

  2. 据说构造函数和析构函数是不被继承的从基类到派生类不过是a下面的程序矛盾,我们正在创建派生类的对象,但是它也输出基类的构造函数和析构函数?


class A{
public:
A(){
cout<< Const A called<<endl;
}
~A(){
cout<< Dest A called <<endl;
}
};

Class B : public A{
public:
B(){
cout<< Const B called <<endl;
}
~B(){
cout<< Dest B called <<endl;
}
};

int main(){
B obj;
return 0;
}

输出:

Const A called

Const B called

Dest B called

Dest A called

最佳答案

派生类 D 不从 B 继承构造函数,因为没有指定显式 D 构造函数我可以使用我的 B(int) 喜欢构造一个new D(1);

但是,我能做的是在派生类构造函数的定义中使用基类构造函数,例如 D::D(void) : B(1) {}

不那么抽象,假设我有一个 Person 的构造函数,它接受一个 gender 参数,我可能希望创建一个:

class Son: Person{
public:
Son(void) : Person(male) {};
};

构造一个Son,这显然是一个Person,但肯定不需要参数化gender

D::~D(){} 的右大括号上隐含了对 ~B() 的调用,从某种意义上说,析构函数是“继承的”。

关于c++ - c++中继承的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29447226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com