将派生对象作为参数传递

Passing Derived Objects as Argument

我有一个 class 学生的构造函数是这样的:

Student(ISubject subject, IStudy study);

ISubject 和 IStudy 是抽象的 classes。然后我创建了从抽象 class 继承的 classes。 (例如数学:ISubject 和微积分:IStudy)

当我想将派生 class 的对象传递给构造函数时,出现错误。我该如何解决?

提前致谢。

Student(const ISubject& subject, const IStudy& study); 应该可以正常工作,如果需要可以丢失常量或者也可以使用它 Student(ISubject* subject, IStudy* study);

如果你的 classes ISubject 和 IStudy 是抽象的 classes,你不能根据语言的规则创建这些类型的对象。但是当你写

(ISubject subject, IStudy study)

它告诉您要将这些类型的对象作为函数参数传递,但这是不可能的,因为这些对象不存在。

可能你应该做的是写

(ISubject* subject, IStudy* study)

在函数声明中,这意味着您不希望对象本身,而是要将指向该类型对象的指针传递给函数。一方面,它不会告诉您要传递先验不存在的对象;从另一方面来看,它可以使用指针将派生的 classes 对象传递给该函数,因为指向派生的 class 的 指针可以隐式转换为指向基址 class.

的指针