链接列表在 cpp 中包含不同的对象类

Linkedlist contain differnt classes of object in cpp

本文关键字:对象 包含不 列表 cpp 链接      更新时间:2023-10-16

我们如何创建一个可以包含不同类对象的链表。 例如,如果一个人是基类,并且它将学生和教师作为派生类,那么我如何创建一个链表,该链表可以包含两个类的对象,如学生和老师。

LinkedList example for understanding my problem:
head->studentobject->teacherobject->studentobject->teacherobject... so on

在这里试试。std::list是一个链表。.

#include <list>
#include <iostream>
#include <memory>
using namespace std;
class Person {
public:
virtual ~Person() = default;
virtual void talk()=0;
};
class Student : public Person {
public:
void talk() {
cout << "Teach me!n";
}
};
class Teacher : public Person {
public:
void talk() {
cout << "Listen!n";
}
};
int main() {
list<std::unique_ptr<Person>> people;
people.push_back(unique_ptr<Person>(new Student()));
people.push_back(unique_ptr<Person>(new Teacher()));
for (auto& p : people) {
p->talk();
}
return 0;
}

通常,您将创建一个基类和派生类:

#include <iostream>
#include <list>
#include <memory>
class Base {
public:
virtual ~Base() = default;
virtual void printClass() = 0;
};
class Student : public Base {
public:
virtual void printClass() { std::cout << "Studentn"; }
};
class Teacher : public Base {
public:
virtual void printClass() { std::cout << "Teachern"; }
};
class Node {
public:
void setTeacher() {
data = std::make_unique<Teacher>();
}
void setStudent() {
data = std::make_unique<Student>();
}
void printClass() { data->printClass(); }
private:
std::unique_ptr<Base> data;
};
int main() {
std::list<Node> l;
l.push_back({});
l.front().setTeacher();
l.front().printClass();
}

使用某种指针来存储引用。您可以使用原始指针,引用,智能指针,...

在这里,您可以阅读何时使用虚拟析构函数