gpt4 book ai didi

c++ - 从基类函数内部调用虚函数

转载 作者:太空宇宙 更新时间:2023-11-04 13:45:12 24 4
gpt4 key购买 nike

<分区>

我有两个类,Object 和 Ball。 Ball 派生自 Object。对象有一个虚函数“move”和一个调用move的非虚函数“moveFast”。 Ball 类从它的父类中重新定义了移动函数。

#include <iostream>

struct Object
{
virtual void move(int dist)
{
std::cout<<"Moving "<<dist<<std::endl;
}
void moveFast(int multiplier)
{
move(10*multiplier);
}
};

struct Ball : public Object
{
void move(int dist)
{
std::cout<<"Rolling "<<dist<<std::endl;
}
};

class List
{
struct Node
{
Node* next;
Object ele;
Node(Object e, Node* n=NULL) : ele(e), next(n){}
};

Node* head;
public:
List() : head(NULL){}
void addObj(Object o)
{
if(head==NULL)
{
head = new Node(o);
return;
}

Node* current = head;
while(current->next!=NULL)
{
current=current->next;
}
Node* obj = new Node(o);
current->next=obj;
}
void doStuff()
{
Node* current = head;
while(current!= NULL)
{
current->ele.moveFast(10);
current=current->next;
}
}
};

int main()
{
Object a,b,c;
Ball d;
List list;

list.addObj(a);
list.addObj(b);
list.addObj(c);
list.addObj(d);
list.doStuff();
}

List 类接收对象并调用它们的 moveFast 函数。因为 a、b 和 c 只是对象,所以我希望输出的前 3 行是“移动 100”。但是,d 是 Ball 类的一个实例。所以我希望输出的第 4 行显示“Rolling 100”,因为 Ball 重新定义了移动函数。

现在所有输出打印

Moving 100
Moving 100
Moving 100
Moving 100

有没有办法从 List 中获取 Ball 的 move 定义?

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