功能不同?
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 将是一个好的开始。 :)
这是代码示例。任务是提供此代码将打印出的输出。它是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()
。
请注意,除了 virtual
和多态性和覆盖之外,B::init()
还 "hides" A::init(bool)
用于正常的重载解析(感谢 C++!),并且因为此 Clang 的一部分将警告您的代码。
至于在哪里可以阅读它,your C++ book 将是一个好的开始。 :)