功能不同?

Different functions?

这是代码示例。任务是提供此代码将打印出的输出。它是2个不同的功能吗?那么 B class 中的 vtable 会发生什么? 它是否只在 2 个具有相同名称的不同函数上存储 2 个指针?

#include<iostream>
#include <vector>
using namespace std;
class A
{
public:
    A()
    {
        init();
    }
    virtual void init(bool a = true)
    {
        if(a)
            cout << "A" << endl;
    }
};
class B :public A
{
public:
    virtual void init()
    {
        cout << "B" << endl;
    }
};

int main()
{
    B b;
    A* a = &b;
    a->init();
    a->init(true);
    system("pause");
}

无法真正找到在哪里阅读此案例。如果你见过这种情况,你能解释一下或给一些消息来源link吗?

它们已经是两个不同的函数(覆盖不会改变),但是因为它们有不同的签名,所以 B 中的那个 不会 覆盖A.

中的一个

记住,函数的名称只是其身份的一部分!它的参数列表也很重要。

如果你将 override 关键字放在 B::init() 上,那么你的程序将无法编译,因为 B::init() 实际上并没有覆盖任何东西(没有 init(),虚拟或其他方式,在其基础上)。

如果这两个函数字面上有不同的名称,如 A::init(bool)B::urgleburgleboop()

,那么真正 "happens" 的 vtable 也不会发生。

请注意,除了 virtual 和多态性和覆盖之外,B::init() 还 "hides" A::init(bool) 用于正常的重载解析(感谢 C++!),并且因为此 Clang 的一部分将警告您的代码。

至于在哪里可以阅读它,your C++ book 将是一个好的开始。 :)