我们是否在C ++中“继承”构造函数?什么是“继承”的确切定义

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)

http://ideone.com/e.js/6jzkiP

那么“说”是正确的吗,构造函数是在c ++中继承的?编程语言中“继承”的确切定义是什么?

提前致谢。

jua*_*nza 6

我想知道为什么人们会说:“继承类不继承构造函数”。

也许最好用一个例子来说明这一点:

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);


NPE*_*NPE 5

它们的意思是构造函数签名不被继承。

在您的示例中,即使B构造函数const int&的基类具有单个值,也没有构造函数。从这个意义上讲,它没有“继承”构造函数(但仍然可以使用它)。