首頁  >  文章  >  後端開發  >  C++ 函式可以宣告為虛函式嗎?虛函數的作用是什麼?

C++ 函式可以宣告為虛函式嗎?虛函數的作用是什麼?

王林
王林原創
2024-04-19 18:06:02653瀏覽

C 中的虛擬函數允許衍生類別重新定義從基底類別繼承的方法,實現多態。其語法為:在基底類別中用virtual關鍵字宣告虛擬函數,在衍生類別中用override重新定義。透過指標或引用呼叫虛擬函數,可實現衍生類別物件呼叫基底類別虛函數。虛函數的主要作用包括:實作多態、支援動態綁定和提供抽象。

C++ 函数可以声明为虚函数吗?虚函数的作用是什么?

C 中的虛擬函數

#簡介

虛函數是一種特殊類型的成員函數,允許衍生類別重新定義從基底類別繼承的方法。這樣可以實現多態,即派生類別物件可以以與基底類別物件相同的方式處理。

語法

虛函數在基底類別中聲明,使用virtual 關鍵字:

class Base {
public:
  virtual void func() { /* ... */ }
};

在衍生類別中,可以重新定義虛擬函數:

class Derived : public Base {
public:
  void func() override { /* ... */ }
};

虛擬函數呼叫透過指標或引用完成,因此衍生類別物件可以呼叫父類別中的虛擬函數:

Base* base = new Derived;
base->func(); // 调用 Derived::func()

實戰案例

考慮以下範例:

class Shape {
public:
  virtual double area() const = 0;
};

class Circle : public Shape {
public:
  Circle(double radius) : _radius(radius) {}
  double area() const override { return _radius * _radius * 3.14; }
  double _radius;
};

class Square : public Shape {
public:
  Square(double side) : _side(side) {}
  double area() const override { return _side * _side; }
  double _side;
};

int main() {
  Shape* shapes[] = {new Circle(5), new Square(4)};
  double total_area = 0;
  for (Shape* shape : shapes) {
    total_area += shape->area();
  }
  std::cout << "Total area: " << total_area << std::endl;
}

此範例中,基底類別Shape 定義了一個抽象函數area(),衍生類別 CircleSquare 提供自己的實作。主函數建立一個 Shape 指標數組,指向衍生類別的對象,並透過虛擬函數呼叫計算總面積。

作用

虛函數的主要作用包括:

  • #實作多態:允許衍生類別物件以通用方式與基類物件互動。
  • 支援動態綁定:在運行時綁定函數調用,根據實際物件類型呼叫衍生類別方法。
  • 提供抽象:基底類別可以定義由衍生類別具體實作的抽象方法。

以上是C++ 函式可以宣告為虛函式嗎?虛函數的作用是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn