假设我有一个纯虚拟类,我可以在C ++中做这样的事情:
class ITreatable
{
public:
bool hasBeenTreated; // <- Can this be here?
virtual bool Treat() = 0;
};
如果没有,我怎样才能确保继承ITreatable
的类有一个名为hasBeenTreated
的成员变量?那可能吗?是否有某种最佳做法可以避免这样做/建议反对它?
由于
编辑:另外我如何为这样的类定义构造函数?
Edit2:我知道公共成员变量是不好的做法,我只是想知道一般来说设计在C ++中是不是一个好主意。
答案 0 :(得分:24)
绝对
严格来说,没有“虚拟课”这样的东西。我知道您使用的术语是指仅由数据成员和虚拟成员函数构成的类。
考虑只有功能可以是虚拟的;如果您希望以多态方式访问数据成员,则必须通过函数执行此操作。因此,使用虚拟getter / setter函数,并将您的数据成员保密。
答案 1 :(得分:3)
是
C ++中没有“纯虚拟”类的概念,只是带有虚拟成员的抽象类。
至于是否有最佳实践,我会说在这个例子中应该遵循的最大做法是不使用公共变量。相反,在基类中定义一个修饰私有变量的setter / getter。
答案 2 :(得分:3)
根据MSDN,界面具有以下特征:
所以我会用
回答你的问题否如果你想要一个界面
和
是如果您只使用抽象类,但正如其他人所说,将它们设为私有并使用公共getter和setter
答案 3 :(得分:2)
这是可能的。 C ++没有语言强制执行的接口,因此您的示例就像普通的类定义一样,没有任何特殊规则。
在类中将变量声明为public是不好的做法。您可能希望将其设为私有并为其声明accessor / mutator或将其声明为受保护。