21xrx.com
2025-07-15 16:45:51 Tuesday
文章检索 我的文章 写文章
C++中类内函数如何使用函数指针
2023-07-06 15:33:14 深夜i     22     0
C++ 类内函数 函数指针 使用

在C++中,类内函数是指在类内声明并定义的函数。类内函数通常被用来访问类的成员变量或实现类的某些操作。使用函数指针则是在C++中实现多态性的一种方式,它允许子类重写父类的虚函数以实现不同的行为。

类内函数可以使用函数指针来实现多态性。想象一下一个图形类,它包含一个用于计算面积的函数。这个函数可以在基类中定义为虚函数,并在派生类中被重写以实现不同的计算方法。这个过程可以通过使用函数指针来实现。

首先,在基类中声明一个函数指针。在图形示例中,这个函数指针可以被定义如下:

typedef double (*calculateAreaPtr)();

这个typedef语句为calculateAreaPtr定义了一个新类型,它代表一个指向返回double类型的函数的指针。

现在,在基类中定义一个虚函数,该函数返回一个指向calculateAreaPtr的指针:

virtual calculateAreaPtr calculateArea() = 0;

这个函数返回一个指向calculateAreaPtr的指针,它是一个纯虚函数(在基类中被定义为 "= 0"),因此它必须在所有派生类中被实现。

例如,在圆形类中,calculateArea() 函数可以被定义如下:

class Circle : public Shape {
public:
  // 包含圆形半径的构造函数
  Circle(double radius) : radius(radius) {}
  
  // 重写 calculateArea() 函数
  virtual calculateAreaPtr calculateArea() {
    // 定义实现 calculateArea() 的函数
    double calcArea() {
      return PI * radius * radius;
    }
    // 返回函数指针
    return calcArea;
  }
private:
  double radius; // 圆形半径
};

在这个例子中,Circle类重写了calculateArea()函数并返回一个指向calcArea()的函数指针,calcArea()函数计算圆形的面积。因为calcArea()函数的返回值是double类型,它符合calculateAreaPtr的定义。

这个例子演示了在C++中如何使用函数指针在类内实现多态性。使用函数指针,派生类可以重写基类中的虚函数以实现不同的行为。

  
  

评论区