gpt4 book ai didi

c++ - 为什么在派生隐藏基函数时使用虚函数?

转载 作者:行者123 更新时间:2023-11-28 00:35:10 26 4
gpt4 key购买 nike

这是我的代码:

#include <iostream>

class cBase
{
public:
void vf(int)
{
std::cout << "cBase\n";
}
};

class cDerived : public cBase
{
public:
void vf(int)
{
std::cout << "cDerived\n";
}
};

int main()
{
cBase b;
cDerived d;

b.vf(0);
d.vf(0);
}

本例隐藏基类的函数vf(),调用派生类的vf()函数。这是另一段代码:

#include <iostream>

class cBase
{
public:
virtual void vf(int)
{
std::cout << "cBase\n";
}
};

class cDerived : public cBase
{
public:
void vf(int)
{
std::cout << "cDerived\n";
}
};

int main()
{
cBase b;
cDerived d;

b.vf(0);
d.vf(0);
}

现在,派生类的 vf() 函数覆盖了 vase 类的 vf() 函数。

所以我的问题是:如果我可以使用 C++ 的默认隐藏机制实现相同的结果,虚函数的意义何在?我在这里错过了什么吗?提前致谢!

最佳答案

要使多态性起作用,您需要处理指针或引用。当您在既不是指针也不是引用的对象上使用点运算符时,虚拟表不会用于调用适当的虚拟函数。

要查看它是如何工作的,动态创建派生对象,将其分配给基类指针并在其上调用您的函数。这将从您的派生类调用实现。

关于c++ - 为什么在派生隐藏基函数时使用虚函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21204008/

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