C ++中Virtual成员的目的是什么?

时间:2011-07-10 02:38:22

标签: c++ virtual

我没有在安全以外的类中看到虚拟成员的目的。在设计实现时是否有任何其他理由使用虚拟?编辑:我删除了变量部分。

2 个答案:

答案 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;
}