我有一系列自定义类 Student 对象。 CourseStudent和ResearchStudent都继承自Student,并且Student的所有实例都是其中之一。
我有一个函数来遍历数组,确定每个学生的子类型,然后对它们调用特定于子类型的成员函数。
问题是,因为这些函数没有重载,所以在 Student 中找不到它们,所以编译器会大惊小怪。
如果我有一个指向 Student 的指针,有没有办法获取指向该 Student 子类型的指针?我需要在这里进行某种假演员来解决编译时错误吗?
最好的办法是使用虚函数:
class Student
{
// ...
virtual void SpecificFunction() = 0; /* = 0 means it's abstract; it must be implemented by a subclass */
// ...
};
class CourseStudent
{
void SpecificFunction() { ... }
};
然后你可以这样做:
Student *student;
student->SpecificFunction();
一个(更糟糕的)替代方案可以是使用dynamic_cast
:
Student *student;
CourseStudent *cs = dynamic_cast<CourseStudent *>(student);
if (cs) {
/* student is a CourseStudent.. */
cs->SpecificFunction();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)