📅  最后修改于: 2023-12-03 15:10:07.985000             🧑  作者: Mango
在 C++ 中,我们通常使用指针来操作对象。指针可以指向任何类型的对象,包括基类和派生类的对象。当我们需要访问一个派生类对象中未被覆盖的基类成员时,我们可以使用指向基类的指针。本文将介绍指向基类的 C++ 指针的使用方法。
在 C++ 中,我们可以定义基类和派生类。基类是一个通用类,它定义了一些公共成员用于其他类继承。派生类是基于基类创建的新类,它继承了基类的成员,并可以添加自己的成员。派生类可以覆盖基类的成员,从而改变其行为。
下面是一个基类和派生类的示例代码:
class Shape
{
public:
virtual double area() = 0;
};
class Circle : public Shape
{
public:
Circle(double r) : radius(r) {}
double area() override { return 3.14159 * radius * radius; }
private:
double radius;
};
在上面的代码中,我们定义了一个基类 Shape
,它具有一个纯虚方法 area()
。然后我们定义了一个派生类 Circle
,它继承了基类 Shape
,并实现了 area()
方法。Circle
类还有一个私有成员变量 radius
,用于表示圆的半径。
我们可以定义一个指向基类的指针,用于操作派生类对象中的基类成员。下面是一个示例代码:
Shape* shape = new Circle(5.0);
double area = shape->area();
在上面的代码中,我们定义了一个指向基类 Shape
的指针 shape
,并将其指向一个派生类 Circle
的对象。然后我们调用了指针所指向的对象的 area()
方法,并将结果赋值给变量 area
。
需要注意的是,我们必须使用指针或引用来访问基类的成员,否则编译器会将派生类对象中的成员视为默认成员,并进行访问。例如,下面的代码将调用派生类 Circle
中的 area()
方法,而不是基类 Shape
中的方法:
Circle circle(5.0);
double area = circle.area(); // 派生类中的 area() 方法被调用
指向基类的 C++ 指针可以用于访问派生类对象中的基类成员。我们可以使用指针或引用来访问基类成员,以避免调用派生类中的默认成员。使用指向基类的指针可以帮助我们灵活地处理对象,同时继承和多态的特性也使我们能够更好地组织代码,并提高代码的可维护性。