C ++继承构造函数[重复]
Posted
技术标签:
【中文标题】C ++继承构造函数[重复]【英文标题】:C++ inherit constructor [duplicate] 【发布时间】:2014-08-21 05:39:17 【问题描述】:我有一个类 Tile
,它有一个带有 Color
对象参数的构造函数:
class Tile
public:
static const int size = 32;
Tile();
Tile(Color &color);
void render(int x, int y);
Color getColor();
~Tile();
private:
Color _color;
;
然后我有一个子类TileGrass
,它继承了Tile
:
class TileGrass : public Tile
public:
TileGrass();
~TileGrass();
;
现在的问题是TileGrass
需要继承带有颜色参数的Tile
构造函数。但是,TileGrass
对象已经知道它需要为超类赋予什么颜色,所以我不想在创建新的TileGrass
对象时传入Color
对象。在 Java 中,我可以这样做:
public class TileGrass extends Tile
public TileGrass()
super(color object);
我如何在 C++ 中做这样的事情?
【问题讨论】:
在 C++(11) 中,继承构造函数意味着能够调用基类的构造函数来构建派生对象。在这里,您只想在派生构造函数中调用特定的基本构造函数,非常标准的事情... @user3316633:另外,请注意~Tile()
应该被声明为虚拟的。有关原因的详细信息,请参阅this question。
@Edward 仅在您打算使用多态性时使用
【参考方案1】:
只需调用初始化列表中相关的基类构造函数即可:
class TileGrass : public Tile
public:
TileGrass() : Tile(some_color)
// ....
~TileGrass();
;
【讨论】:
我相信这在ISO标准中实际上也称为继承构造函数。 @TheFloatingBrain 继承构造函数指的是不同的东西。例如,using Tile::Tile
可以让您构造TileGrass t(some_color);
,而无需声明和定义TileGrass(Color&)
。
@TheFloatingBrain 见Inheriting constructors
@Drop 我忘了,谢谢 :-)
@juanchopanza 谢谢我有点忘了:-)以上是关于C ++继承构造函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章
[C++11 类的改进] --- 继承构造函数和委托构造函数