【问题标题】:constant variable in base class基类中的常量变量
【发布时间】:2014-01-30 06:18:47
【问题描述】:

我有两个班级,AbstractBaseAbstractBase 类的基础。

class Abstract 
{
public:
    virtual ~Abstract();

    const int                   aID;

protected:
    // Constructor is protected because this class is abstract.
    Abstract(int xID) : 
    aID(xID){}
};

#define BASE_CLASS_ID           0x0001

class Base : public Abstract
{
public:
    Base() : 
    Abstract(BASE_CLASS_ID){} // change the ID
};

现在对于这个基类的任何 Derived 类,我希望使用相同的 ID BASE_CLASS_ID。 如何要求我的所有派生类都采用这种行为?

【问题讨论】:

  • 你已经做到了!
  • 顺便说一句,Derived 会调用 Base::Base(),但不会调用 Abstract::Abstract()
  • 你能告诉我怎么做吗?我不认为 Derived 会自动调用 Base 构造函数,还是这样?
  • 任何继承Base的类都必须调用Base的构造函数(在这种情况下不需要,因为Base::base()没有参数,所以它会被自动调用。Base的构造函数已经使用BASE_CLASS_ID 调用Abstract 的构造函数。
  • 我假设你声明class Derived : public Base,对吗?

标签: c++ abstract-class derived-class


【解决方案1】:

如果您希望所有派生类都具有相同的常量数据成员 aID 值,为什么不将此数据成员定义为静态常量数据成员?例如

class Abstract 
{
public:
    virtual ~Abstract();
    enum  { BASE_CLASS_ID = 0x0001 };
    const static int aID = BASE_CLASS_ID;

protected:
    // Constructor is protected because this class is abstract.
    Abstract() = default;
};

【讨论】:

    猜你喜欢
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 2017-04-20
    • 2020-12-20
    相关资源
    最近更新 更多