c++ - C++ 中带有继承类的链表?

标签 c++ class list inheritance

我正在为程序创建类列表。然而,基类有多个 child ,并且有些 child 还拥有 child 。我是否需要以任何方式更改我的列表以适应继承的类?感谢您的帮助!

太好了,感谢您的帮助!这是一个非常基本的问题,但是在创建孙子类时,这是正确的格式吗?

C 类:公共(public) B:公共(public) A {

或者只是

C 类:公共(public) B { ?

最佳答案

执行以下程序:

#include <iostream>
#include <list>

struct A
{
    virtual void hello()
       { std::cout << "Hello from A\n"; }
};

struct B : public A
{
    virtual void hello()
       { std::cout << "Hello from B\n"; }
};

int main()
{
    std::list<A>  l1;
    std::list<A*> l2;
    A a;
    B b;

    l1.push_back(a);
    l1.push_back(b);

    l2.push_back(&a);
    l2.push_back(&b);

    l1.front().hello();
    l1.back().hello();

    l2.front()->hello();
    l2.back()->hello();
}

我们声明两个列表,一个使用类 A 的实例,另一个使用指向 A 的指针。您可以将 B 的实例放入第一个列表中,因为 BA (由于继承)。但是,当您尝试访问第一个列表中的项目的数据和方法时,您无法访问 B 中的数据,该项目认为它们属于 A 类,即使它们不是。

对于第二个列表,由于使用了指针和方法的虚拟重载,它仍然有效。

希望这对您的问题有所帮助。

关于c++ - C++ 中带有继承类的链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8046585/

相关文章:

c++ - 如何使用 CMake 在 KDevelop 中定义多配置?

c++ - 通过指向引用的指针修改类变量

java - 如何获取 TestNG 监听器所作用的类的名称?

css - 所有 <li> 列表的高度相同

Java流: Nested Stream lookup Over Multiple List throws NPE

c++ - OpenCL Reduce 内核只返回一个值

C++:跟踪类对象

python - 将字典中的值转换为矩阵

c++ - Qt 无法在 Windows 上打开包含文件

php - 您如何遍历当前类属性(不是从父类或抽象类继承的)?