用继承重新定义构造函数

Redefinition of constructor with inheritance

本文关键字:定义 构造函数 继承 新定义      更新时间:2023-10-16

为什么在底层示例中让编译器抱怨B构造函数的重新定义。如果我删除{},它会抱怨它们需要在那里。如何正确地做到这一点?我想在CPP文件中实现B的构造函数,而不是内联的。

#include <vector>
#include <sstream>
#include <iostream>
using namespace std;
class A
{
    public:
        A();
        ~A();
};
class B : public A
{
    public:
        B() : A() {};
        ~B();
};
A::A()
{
    cout << "A construct!";
}
B::B()
{
    cout << "B construct!";
    cout << "B construct!";
    cout << "B construct!";
    cout << "B construct!";
    cout << "B construct!";
    cout << "B construct!";
    cout << "B construct!";
    cout << "B construct!";
    cout << "B construct!";
    cout << "B construct!";
}
int main()
{
    return 0;
}

您已经在类定义中定义了B构造函数:

class B : public A
{
  public:
    B() : A() {};
    ~B();
};

所以,当你在类定义之外再次定义它时:

B::B()
{
    cout << "B construct!";

你得到错误;如果正确的构造函数是最后一个,那么用下面的定义替换你的类定义:

class B : public A
{
  public:
    B();
    ~B();
};

如果你想在B构造函数定义中指定基类构造函数,你可以这样做:

B::B()
    : A()
{
    cout << "B construct!";

删除: A() {},这是构造函数的主体,而不仅仅是{}。将初始化器列表添加到稍后的B::B()正文