用继承重新定义构造函数
Redefinition of constructor with inheritance
为什么在底层示例中让编译器抱怨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()
正文
相关文章:
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 当类成员参数具有相同的名称时,如何定义构造函数?
- C++定义构造函数使对象成为非 POD
- 请描述一下在 c++ 中在此类中定义构造函数的方式?
- 不为 emplace() 定义构造函数的解决方法
- 已定义构造函数的构造函数无法识别
- 在自定义构造函数中的堆上创建指针
- c++ 17 中结构自动定义构造函数的规则是什么?
- Python 错误:在 SWIG 生成的C++模板化代码模块中没有定义构造函数
- unique_ptr看不到派生类的自定义构造函数
- 两种类型的定义构造函数有什么区别?第一个使用":",第二个用大括号(如函数)定义它
- 为什么一个非平凡的成员需要为同一类中的匿名联合定义构造函数
- 为其成员根据模板基类存在的类定义构造函数
- 如何在派生类上具有默认行为,而不是重新定义构造函数
- 在结构中定义构造函数
- 将从基类继承的构造函数与自定义构造函数混合使用
- 如何在模板类外部定义构造函数
- C 需要使用自定义构造函数的帮助
- 可以联合包含具有用户定义构造函数的类的对象
- 具有用户定义构造函数的非聚合类的值初始化