gpt4 book ai didi

c++ - 功能不同?

转载 作者:行者123 更新时间:2023-11-28 01:27:03 25 4
gpt4 key购买 nike

这是代码示例。任务是提供此代码将打印出的输出。它是2个不同的功能吗?那么 B 类中的 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");
}

无法真正找到在哪里阅读有关此案例的信息。如果你见过这种情况,你能解释一下或提供一些来源的链接吗?

最佳答案

它们已经是两个不同的函数(重写不会改变这一点),但是因为它们有不同的签名,所以 B 中的函数不会重写A

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

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

如果这两个函数字面上有不同的名称,如 A::init(bool)B::urgleburgleboop,则 vtable 不会真正“发生”任何事情()

请注意,除了 virtual 和多态性和覆盖之外,B::init() 还“隐藏”了 A::init(bool) 用于正常的重载解析(感谢 C++!),因此 Clang 会在您的代码上发出警告。

至于哪里可以看到,your C++ book将是一个好的开始。 :)

关于c++ - 功能不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53284920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com