ホームページ > バックエンド開発 > C++ > C++ 関数は仮想宣言できますか?仮想関数の役割は何ですか?

C++ 関数は仮想宣言できますか?仮想関数の役割は何ですか?

王林
リリース: 2024-04-19 18:06:02
オリジナル
705 人が閲覧しました

C の仮想関数を使用すると、派生クラスが基本クラスから継承したメソッドを再定義してポリモーフィズムを実現できます。構文は次のとおりです。基本クラスで virtual キーワードを使用して仮想関数を宣言し、派生クラスでオーバーライドを使用してそれを再定義します。ポインターまたは参照を通じて仮想関数を呼び出すことにより、派生クラス オブジェクトは基本クラスの仮想関数を呼び出すことができます。仮想関数の主な機能には、ポリモーフィズムの実現、動的バインディングのサポート、および抽象化の提供が含まれます。

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() を定義し、派生クラス Circle および Square は独自の実装を提供します。 main 関数は、派生クラスのオブジェクトを指す Shape ポインターの配列を作成し、仮想関数呼び出しを通じて合計面積を計算します。

関数

仮想関数の主な機能は次のとおりです:

  • ポリモーフィズムの実現:派生クラス オブジェクトの使用を許可します。基本クラスのオブジェクトと対話するための一般的な方法。
  • サポート動的バインディング: 実行時に関数呼び出しをバインドし、実際のオブジェクト タイプに応じて派生クラス メソッドを呼び出します。
  • 抽象化の提供: 基本クラスは、派生クラスによって具体的に実装される抽象メソッドを定義できます。

以上がC++ 関数は仮想宣言できますか?仮想関数の役割は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート