我没有在安全以外的类中看到虚拟成员的目的。在设计实现时是否有任何其他理由使用虚拟?编辑:我删除了变量部分。
答案 0 :(得分:3)
没有虚拟变量,只有虚函数或虚拟继承。因此,缺乏这样的目的似乎是一件好事。
编辑:虚函数是C ++实现运行时多态的方式。试图解释多态性的用途/目的可能有点超出合理大小的帖子。但是,一般的想法是,您可以在基类中定义某种类型的行为,然后在每个派生类中以不同的方式实现该行为。对于比大多数更实际的示例,请考虑基类database
类,它定义诸如查找符合某些条件的记录集之类的内容。然后,您可以使用SQL数据库(通过生成SQL)以一种方式实现该行为,而使用MongoDB实现另一种方式。一个实现将与另一个实现完全不同,但从抽象角度来看,它们仍然都在做同样的基本事情(查找/读取/写入记录)。
答案 1 :(得分:2)
我将回答......在代码中!
#include <string>
struct Base
{
// virtual int MemberVariable; // This is not legal C++. Member variables cannot be virtual.
virtual ~Base() {} // Required for polymorphism.
std::string NotVirtual()
{
return "In Base.";
}
virtual std::string Virtual()
{
return "In Base.";
}
};
struct Derived: public Base
{
std::string NotVirtual()
{
return "In Derived.";
}
std::string Virtual()
{
return "In Derived.";
}
};
int main()
{
Base* BasePointer = new Derived;
std::string StringFromBase = BasePointer->NotVirtual(); // "In Base.";
std::string StringFromDerived = BasePointer->Virtual(); // "In Derived."
delete BasePointer;
return 0;
}