c++中虚成员的目的是什么?

What is the purpose of Virtual member in C++?

本文关键字:是什么 成员 c++      更新时间:2023-10-16

在类中,除了安全之外,我看不出虚成员的作用。在设计实现时使用virtual还有其他的原因吗?编辑:我擦掉了变量部分

不存在虚变量,只有虚函数或虚继承。因此,缺乏目的似乎是一件好事。

编辑:虚函数是c++实现运行时多态性的方式。试图解释多态性的用途/目的可能有点超出了一个合理大小的帖子的范围。但是,一般的思想是,您可以在基类中定义某种类型的行为,然后在每个派生类中以不同的方式实现该行为。对于一个比大多数更实际的例子,考虑一个基本的database类,它定义了诸如查找符合某些标准的一组记录之类的事情。然后,您可以通过一种方式(通过生成SQL)和另一种方式(例如MongoDB)实现该行为。其中一个的实现将与另一个有很大的不同,但抽象地看,它们仍然都在做相同的基本事情(查找/读取/写入记录)。

我将回答…在代码!

#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;
}