📌  相关文章
📜  指向基类的 C++ 指针 - C++ (1)

📅  最后修改于: 2023-12-03 15:10:07.985000             🧑  作者: Mango

指向基类的 C++ 指针

在 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++ 指针可以用于访问派生类对象中的基类成员。我们可以使用指针或引用来访问基类成员,以避免调用派生类中的默认成员。使用指向基类的指针可以帮助我们灵活地处理对象,同时继承和多态的特性也使我们能够更好地组织代码,并提高代码的可维护性。