【问题标题】:C++ inherit constructor [duplicate]C ++继承构造函数[重复]
【发布时间】: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 仅在您打算使用多态性时使用

标签: c++ inheritance constructor


【解决方案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 谢谢我有点忘了:-)
猜你喜欢
  • 1970-01-01
  • 2015-03-24
  • 2017-12-05
  • 1970-01-01
  • 2020-01-01
  • 2011-05-31
  • 2019-01-21
  • 2019-01-12
  • 2014-06-15
相关资源
最近更新 更多