C ++中的虚拟类可以有成员变量吗?

时间:2011-05-18 23:18:59

标签: c++

假设我有一个纯虚拟类,我可以在C ++中做这样的事情:

class ITreatable
{
    public:
       bool hasBeenTreated;           // <- Can this be here?
       virtual bool Treat() = 0;
};

如果没有,我怎样才能确保继承ITreatable的类有一个名为hasBeenTreated的成员变量?那可能吗?是否有某种最佳做法可以避免这样做/建议反对它?

由于

编辑:另外我如何为这样的类定义构造函数?

Edit2:我知道公共成员变量是不好的做法,我只是想知道一般来说设计在C ++中是不是一个好主意。

4 个答案:

答案 0 :(得分:24)

绝对

严格来说,没有“虚拟课”这样的东西。我知道您使用的术语是指仅由数据成员和虚拟成员函数构成的类。

考虑只有功能可以是虚拟的;如果您希望以多态方式访问数据成员,则必须通过函数执行此操作。因此,使用虚拟getter / setter函数,并将您的数据成员保密。

答案 1 :(得分:3)

C ++中没有“纯虚拟”类的概念,只是带有虚拟成员的抽象类。

至于是否有最佳实践,我会说在这个例子中应该遵循的最大做法是不使用公共变量。相反,在基类中定义一个修饰私有变量的setter / getter。

答案 2 :(得分:3)

根据MSDN,界面具有以下特征:

  • 必须在命名空间中声明接口类(或结构) 并且可能具有公共或私人可访问性。只有公共接口 被发送到元数据。
  • 接口的成员可以包括属性,方法和 事件。
  • 所有界面成员都是隐式公开和虚拟的。
  • 不允许使用字段和静态成员。
  • 用作属性,方法参数或返回的类型 值只能是Windows运行时类型;这包括 基本类型和枚举类类型。

所以我会用

回答你的问题
  

如果你想要一个界面

  

如果您只使用抽象类,但正如其他人所说,将它们设为私有并使用公共getter和setter

答案 3 :(得分:2)

这是可能的。 C ++没有语言强制执行的接口,因此您的示例就像普通的类定义一样,没有任何特殊规则。

在类中将变量声明为public是不好的做法。您可能希望将其设为私有并为其声明accessor / mutator或将其声明为受保护。

相关问题