我觉得Java比C++更流利,所以我会尝试用几句话来解释我想要"传输"的东西.在Java您可以创建一个ArrayList从另一个继承其中的一个2或多个类的包含对象.让我来说明一下.假设我们有:
class Vehicle
{
...
}
class Car extends Vehicle
{
...
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以做类似的东西,Car a = new Vehicle ([arguments]);
然后你可以添加两个对象Vehicle,并Car以相同ArrayList的创建如下:
ArrayList ar = new ArrayList<Car>();
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,在C++中我手动编写代码来创建一个简单的链表.该列表的每个节点如下所述:
struct clientListNode
{
vip* cust;
struct clientListNode* next;
};
Run Code Online (Sandbox Code Playgroud)
vip是另一个派生自的类customer.有没有办法让我的列表接受vip类和customer类的对象?
多态性以另一种方式起作用.您可以使用customer*指针指向vip对象,但不能指向其他方式.(这与Liskov替代原则有关.)
所以,如果你customer*的clientListNode课程中有一个,它会接受这两个vip*和customer*指针.
但是,我认为你不应该重新发明轮子并从地面实施一个链表.您应该查看已经为此类问题提供解决方案的STL(标准模板库).例如,它已经有一个链表std :: list的实现.
你必须std::list使用你想要使用它的基本类型模板,但重要的是你不能直接将类型用作value(std::list<cust>),因为这会将cust实例存储在内存中,你不能在更具体的vip类型(会发生切片).
相反,您必须使用某种句柄作为模板参数,您可以使用本机指针(std::list<cust*>),但这样您必须管理内存释放,或者 - 更优选 - 您可以使用智能指针,如shared_ptr(std::list<std::shared_ptr<cust>>),创建的对象将被自动销毁的方式.