【发布时间】:2020-07-23 20:21:16
【问题描述】:
我正在尝试编写一个函数parkVehicle(),该函数必须通过基类指针访问派生类的读取成员函数。如何访问它?
class Parking {
const int MAX_SPOTS_NO = 100;
Base B[MAX_SPOTS_NO];
void parkVehicle() const;
}
class Base : public Read {
std::istream& read(std::istream& istr = std::cin);
}
class derived : public Base {
std::istream& read(std::istream& istr = std::cin);
}
class Read{
virtual std::istream& read(std::istream& istr = std::cin) = 0;
}
void parkVehicle() {
//call read from the derived class
}
【问题讨论】:
-
至少有两个基本的 C++ 原因导致您不能这样做。 C++ 对象根本无法以这种方式工作。您需要实现虚拟继承,并且您需要对对象切片做一些事情。 C++ 不是 Java。有关详细信息,请参阅 C++ 教科书。
-
如果您认为需要通过基类指针访问派生类成员,那么您的设计很可能存在缺陷。后退几步,重新考虑你的方法。 (可能,您希望在基类中使用虚函数,但请检查您的方法以确保抽象级别有意义。)
标签: c++ c++11 pointers derived-class base-class