c++;返回子类,其中函数返回指向超类的指针 我是C++新手。我附上了一个uml图表,我的问题是返回一个定义为超类的类,但实际上我将返回一个扩展它的类

c++;返回子类,其中函数返回指向超类的指针 我是C++新手。我附上了一个uml图表,我的问题是返回一个定义为超类的类,但实际上我将返回一个扩展它的类,c++,inheritance,C++,Inheritance,在uml图中,所讨论的超类是Booking,子类是Single和Sharing,它们扩展了它。我在BookList类中有一个函数addBooking([…]),这就是我的问题所在。 我定义了Booking,然后定义了另外两个子类,它们将其扩展为Single和Sharing。我的问题是,我可以在BookingList.addBooking([…])函数中返回Single或Shared类吗? 我的两个子类都初始化了超级类,例如Single初始化它如下: Single::Single(Person

在uml图中,所讨论的超类是Booking,子类是Single和Sharing,它们扩展了它。我在BookList类中有一个函数addBooking([…]),这就是我的问题所在。

我定义了Booking,然后定义了另外两个子类,它们将其扩展为Single和Sharing。我的问题是,我可以在BookingList.addBooking([…])函数中返回Single或Shared类吗? 我的两个子类都初始化了超级类,例如Single初始化它如下:

Single::Single(Person c, QDate a, QDate d, Person g): Booking(c, a, d){[...]}

可以。Single和Share属于Booking类型,因此返回指向Single或Share实例的指针作为Booking类型实例的指针是完全合法的

我仍然可以访问扩展类变量吗?从我所能看到的来看,我认为我不能,因为返回函数返回父对象,我只能访问父信息。不,您不能通过对基类对象的指针/引用访问继承类的数据。要做到这一点,您需要向下转换为继承的类型。通常,当您有一个基类型的实例指向派生类型的实例时,您的代码依赖于多态性来完成其任务。否则,你的设计是错误的,你应该修改它。请仔细阅读这篇文章:感谢您的帮助,我使用了多态性,正如我所期望的那样完美地工作。我有一个父对象,我使用*访问列表中的子对象。即,
Booking*Booking=bookingList.at(i)并提供派生对象的值。让我的头绕过指针。