Pau*_*ski 3 c++ theory inheritance constructor
我不知道为什么人们会说:
“继承类不会继承构造函数”。
如果可以使用父类的构造函数,则无论如何都将自动调用无参数构造函数。
例:
#include <iostream>
using namespace std;
class A {
private :
int x;
public :
A () {
cout << "I anyway use parameter-less constructors, they are called always" << endl;
}
A (const int& x) {
this->x = x;
cout << "I can use the parent constructor" << endl;
}
};
class B : public A {
private :
int y;
public :
B() {
}
B (const int& x, const int& y) : A (x) {
this->y = y;
}
};
int main() {
B* b = new B(1,2);
B* b1 = new B();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
那么“说”是正确的吗,构造函数是在c ++中继承的?编程语言中“继承”的确切定义是什么?
提前致谢。
我想知道为什么人们会说:“继承类不继承构造函数”。
也许最好用一个例子来说明这一点:
struct Foo
{
Foo(int, int) {}
};
struct Bar : Foo
{
};
Run Code Online (Sandbox Code Playgroud)
这意味着没有Bar::Bar(int, int)可以调用的构造函数,尽管在基类中存在具有相同参数列表的构造函数。所以你不能这样做:
Bar b(42, 42);
Run Code Online (Sandbox Code Playgroud)
在 C++11 中,您实际上可以继承构造函数,但您必须明确说明它:
struct Bar : Foo
{
using Foo::Foo;
};
Run Code Online (Sandbox Code Playgroud)
现在,你可以说 Bar b(42, 42);
它们的意思是构造函数签名不被继承。
在您的示例中,即使B构造函数const int&的基类具有单个值,也没有构造函数。从这个意义上讲,它没有“继承”构造函数(但仍然可以使用它)。