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

标签 c++ list inheritance polymorphism derived

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

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/

相关文章:

css - 左浮动列表

python - 错误 : IndexError: string index out of range. 试图颠倒列表的顺序

database - 在数据库中建模继承

c++ - 如果您在 .h 文件中包含某些内容,您是否必须再次包含相同的内容?

scala - 将列表拆分为列表列表

c++ - 如何取消引用 nullptr 返回正确的对象?

C++ 单例模板类使我的程序崩溃

java - 为什么变量在覆盖时的行为与方法不同。?

c++ - valarray 除元素

c++ - 在静态分配的对象上调用虚函数时是否使用虚表