gpt4 book ai didi

c++ - 使用列表对象内部对象的派生函数

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

我有两个类,其中一个继承了另一个:

class baseClass
{
public:
virtual void show();
};

void baseClass::show(){cout << "Base class" << endl;}


class derivedClass
{
public:
void show();
};

void derivedClass::show(){cout << "Derived class" << endl;}

如果我创建一个 derivedClass 对象并调用 show 函数,它会正确打印“Derived class”。如果我执行以下操作:

derivedClass b;
baseClass* b;
b=&d;
b->show();

它再次正确打印出“派生类”。但是,如果我列一个这样的列表:

list<baseClass> t;
list<baseClass>::iterator it;
baseClass b;
derivedClass d;
t.push_back(b);
t.push_back(d);

并尝试在每个项目上调用 show:

it = t.begin();
it->show();
it++;
it->show();

b 和 d 的输出都是“基类”。我的问题是:为什么它只使用 show() 的 baseClass 版本,我怎样才能让它正确地使用列表中 derivedClass 对象的派生版本?

提前致谢

最佳答案

您必须将方法 show() 声明为 virtual 才能使多态性起作用:

class baseClass
{
public:
virtual void show();
};

void baseClass::show(){cout << "Base class" << endl;}


class derivedClass : public baseClass
{
public:
virtual void show();
};

void derivedClass::show(){cout << "Derived class" << endl;}

您还缺少 class derivedClass : public baseClass

最后一个问题。您需要使用指针。

list<baseClass*> t;
list<baseClass*>::iterator it;
baseClass b;
derivedClass d;
t.push_back(&b);
t.push_back(&d);

并更改为:

it = t.begin();
(*it)->show();
it++;
(*it)->show();

关于c++ - 使用列表对象内部对象的派生函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7459253/

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