我正在为程序创建类列表。然而,基类有多个 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
的实例放入第一个列表中,因为 B
是 A
(由于继承)。但是,当您尝试访问第一个列表中的项目的数据和方法时,您无法访问 B
中的数据,该项目认为它们属于 A
类,即使它们不是。
对于第二个列表,由于使用了指针和方法的虚拟重载,它仍然有效。
希望这对您的问题有所帮助。
关于c++ - C++ 中带有继承类的链表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8046585/