gpt4 book ai didi

c++ - 具有相同名称但不同参数和返回类型的虚函数

转载 作者:行者123 更新时间:2023-11-28 04:16:21 25 4
gpt4 key购买 nike

<分区>

我在一次采访中被问到这个问题。我的回答是(3 和 3.6)(错误)。请解释我的理解是错误的

我的想法是指针 bd 将指向派生类 vtable 的 _vptr。

派生类的 Vtable 将包含 2 个函数

double func(double) // ----->points to Derived::func()
int func(int) // ----->points to Base::func()

因此,

bd->func(2)   // will call Base::func() i.e int func(int)
bd->func(2.3) // will call Derived::func() i.e double func(double)

请解释我的理解是错误的。另外,请解释 Base::func() 不是 virtual 的情况。那样的话,就没有vtable了吧?函数调用将如何解决?

#include <iostream>    
using namespace std;

class Base
{
private:
/* data */
public:
Base(/* args */){};
~Base(){};

//int func(int i) getting same answer regardless of virtual
virtual int func(int i)
{
cout << "Base func()" << endl;
return i+1;
}
};

class Derived : public Base
{
public:
Derived(/* args */){};
~Derived(){};

double func(double d)
{
cout << "Derived func()" << endl;
return d+1.3;
}
};

int main() {
Base* bd = new Derived();
cout << bd->func(2) << endl;
cout << bd->func(2.3) << endl;
return 0;
}

预期输出:

Base func()
3
Derived func()
3.6

Actual output:
Base func()
3
Base func()
3

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