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 类的改进] --- 继承构造函数和委托构造函数

C++11 继承构造函数和委托构造函数

C++11 继承构造函数和委托构造函数

[C++11 类的改进] --- 继承构造函数和委托构造函数

[C++11 类的改进] --- 继承构造函数和委托构造函数