通过基类指针访问派生类
可以使用多态性来通过基类指针访问子类。当一个基类的指针指向一个派生类的对象时,可以使用以下方式访问子类。
使用虚函数
将函数声明为虚函数,并在派生类中重写该函数,然后通过基类指针调用该函数,将会调用到派生类的实现,从而访问派生类。
class Base {
public:
virtual void print() {
cout << "这是基类" << endl;
}
};
class Derived : public Base {
public:
void print() {
cout << "这是派生类" << endl;
}
};
int main() {
Base* p = new Derived();
p->print(); // 输出:“这是派生类”
return 0;
}
使用动态类型转换
通过将基类指针转换成派生类指针,然后访问派生类的成员。
class Base {
// ...
};
class Derived : public Base {
public:
int value;
};
int main() {
Base* p = new Derived();
Derived* q = dynamic_cast<Derived*>(p);
q->value = 1;
return 0;
}
在使用动态类型转换之前,需要使用 dynamic_cast 进行类型检查,以确保指针可以安全地进行转换。