复制构造函数和继承
Copy constructors and inheritance
我有三个类。
class A
{
private:
int num;
//...
// THIS IS AN ABSTRACT CLASS (has a pure virtual function)
}
class B : public A
{
private:
float fnum;
//...
}
class C : public A
{
private:
double dnum;
//...
}
现在,我有一个函数
foo(A& someA)
,在其中,我想根据它的类型(B
或C
)初始化一个A*
对象。这个A
原来可以是B
或C
如何使用复制构造函数做到这一点?像这样:
A* newA = A.isB ? new B(someA) : new C(someA)
和我添加了如下的复制构造函数:
B(const B& b) : A(b) { fnum = b.fnum; }
C(const C& c) : A(c) { dnum = c.dnum; }
但是这当然会在
这一行抛出错误A* newA = A.isB ? new B(someA) : new C(someA)
没有合适的构造函数
简单的解决方案是:
A* newA = A.isB ? new B(dynamic_cast<const B&>(someA)) :
new C(dynamic_cast<const C&>(someA));
一个更简洁的解决方案是声明:
virtual A* clone() const = 0;
在A
中,然后创建newA
只是:
A* newA = someA.clone();
每个派生类,写:
A* B::clone() const {
return new B(*this);
}
但是要注意:如果您从B
派生了一个类,那么您将需要重新实现clone
,并且如果您不这样做,编译器将不会发出警告。
相关文章:
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 如果我真的真的想从 STL 容器继承,并且我继承构造函数并删除新运算符,会发生什么?
- C++继承:构造函数中的字符串构造
- 继承构造函数和其他变量的解决方法
- 带有此指针的模板类多重继承构造函数不起作用?
- 虚拟继承构造函数的组装
- C++继承构造函数的可见性
- 继承构造函数(ISO 2011 SEC 12.9第7段)
- 没有C 11的继承构造函数
- 使用关键字继承构造函数时出乎意料的行为
- 继承构造函数不允许类似数组的初始化
- 从基于QObject的类继承构造函数
- 继承构造函数并提供新的重载:无参数基构造函数似乎不参与重载解析
- C++多继承构造函数
- 具有独占继承构造函数的类的值初始化
- C++ 继承构造函数重写
- 继承构造函数与转发
- 默认情况下继承构造函数 noexcept(true)
- 有没有办法在继承构造函数时访问初始值设定项列表
- 从 std::function 继承构造函数时"function returning a function"