首页 > 解决方案 > C++不支持非成员虚函数的原因是什么

问题描述

我很想知道 C++ 中没有非成员虚函数的原因是什么。特别是考虑到它只是在您想要实现它时增加了代码层,因为您可以定义一个虚拟成员函数,然后从非成员函数调用它。

编辑:仅供参考,您可以这样做:

struct Base
{
    virtual void say() const
    {
        std::cout << "Base\n";
    }
};

struct Derived : public Base
{
    void say() const final
    {
        std::cout << "Derived\n";
    }
};

void say(Base* obj)
{
    obj->say();
}

say(static_cast<Base*>(new Derived()));

编辑2:确实存在您需要虚拟多态性的情况,因为您可能会遇到以下情况,它不能以类似的方式工作,因为它会打印 Base 而如果您要使用上述代码调用它,则类似时尚它将打印派生。我相信这总结了问题的症结所在。

void say(Base* obj)
{
    std::cout << "Base\n";
}

void say(Derived* obj)
{
    std::cout << "Derived\n";
}
say(static_cast<Base*>(new Derived()));

标签: c++

解决方案


非成员函数不需要隐式this指针来调用它。

但是虚函数需要一个this指针(即对象实例)才能使多态起作用。

还有一个矛盾:所以不可能有一个多态的非成员函数。


推荐阅读