gpt4 book ai didi

c++ - 派生类中的方法在引用类中没有 *virtual* 关键字的情况下执行

转载 作者:行者123 更新时间:2023-11-27 23:56:51 25 4
gpt4 key购买 nike

class vehicle
{
public:
virtual void drive()
{
cout<<"in vehicle drive"<<endl;
}
};
class bus:public vehicle
{
public:
void drive()
{
cout<<"in bus drive"<<endl;
}
};
class supervehicle:public bus
{
public:
void drive()
{
cout<<"in supervehicle"<<endl;
}
};


int main()
{
bus *b;
b=new supervehicle();
b->drive();
return 0;
}

我预计输出为“在公共(public)汽车驱动器中”,但输出是“在 super 车辆中”。如果 virtual 关键字与总线类中的 drive 方法相关联,那么输出肯定应该是 in bus drive。我知道我们继承了车辆类,但我们仍然只为总线类创建了指针。有人能帮我解释一下为什么 vehicle 类中的 virtual 关键字会影响 bus 类的方法吗?我在哪里漏掉了重点?

最佳答案

virtual 关键字是一个说明符,表示应通过动态调度调用该函数。它不需要在每个派生类中重复;一旦一个成员函数是虚拟的,它在每个派生类中都是虚拟的。

而通过动态分派(dispatch)调用的版本是来自覆盖它的最派生类的版本。所以在你的例子中,b指向的对象的动态类型是supervehicle,所以调用的函数是supervehicle::drive,并且不是 bus::drive

2011 年 C++ 标准修订版中出现的相关说明符是 override。您应该在重写函数上使用它,让编译器知道您正在尝试重写虚函数。如果您在函数原型(prototype)中犯了错误,编译器将发出诊断。

关于c++ - 派生类中的方法在引用类中没有 *virtual* 关键字的情况下执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42083237/

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