📅  最后修改于: 2023-12-03 15:10:08.020000             🧑  作者: Mango
在面向对象的程序设计中,经常会存在基类和派生类的关系。有时候我们需要在编写代码时使用基类指针来访问派生类对象。这篇文章将介绍如何使用指向派生类对象的基类指针。
在C++中,我们可以使用继承的方式创建基类和派生类。基类包含了所有派生类的共同特征,派生类可以继承基类,并且可以添加自己的特征。
我们可以通过下面的代码来创建基类和派生类:
class Base {
public:
int x;
void print() {
std::cout << "Base: " << x << std::endl;
}
};
class Derived : public Base {
public:
int y;
void print() {
std::cout << "Derived: " << x << ", " << y << std::endl;
}
};
在上面的代码中,Base
是基类,Derived
是派生类。派生类Derived
继承了基类Base
的公共成员x
,并且添加了自己的成员y
。同时,派生类Derived
还覆盖了基类Base
的成员函数print()
,使其可以输出Derived
对象的信息。
使用基类指针访问派生类对象非常常见。下面是一个例子,展示了如何使用基类指针访问派生类对象的成员函数和成员变量:
void print(Base* p) {
p->print(); // 调用基类的 print 函数
if (Derived* q = dynamic_cast<Derived*>(p)) {
std::cout << "Derived: " << q->y << std::endl; // 访问派生类的 y 成员
}
}
int main() {
Base b;
Derived d;
b.x = 1;
d.x = 2;
d.y = 3;
print(&b); // 输出 Base: 1
print(&d); // 输出 Derived: 2, 3
return 0;
}
在上面的代码中,我们定义了一个函数print()
,它的参数是一个基类指针p
。如果指针p
指向的对象是派生类Derived
的对象,就将指针p
转换为派生类指针q
,并且输出派生类对象的成员变量y
。否则,就输出基类对象的信息。
在print()
函数中,我们使用了dynamic_cast
运算符将基类指针p
转换为派生类指针q
。如果p
指向的对象不是Derived
的对象,dynamic_cast
会返回一个空指针,我们可以用if
语句判断是否转换成功。
本文介绍了如何使用指向派生类对象的基类指针。希望对你学习面向对象的程序设计有所帮助。