使用继承重新定义构造函数

时间:2011-07-26 21:43:13

标签: c++

为什么在底层示例中让编译器抱怨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;
}

2 个答案:

答案 0 :(得分:4)

您已在类定义中定义了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!";

答案 1 :(得分:1)

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