ホームページ > バックエンド開発 > C++ > C++ で仮想関数を宣言して呼び出すにはどうすればよいですか?

C++ で仮想関数を宣言して呼び出すにはどうすればよいですか?

WBOY
リリース: 2024-04-12 16:03:02
オリジナル
1170 人が閲覧しました

仮想関数は、派生クラスがその基本クラスのメンバー関数をオーバーライドできるようにするポリモーフィズム メカニズムです。 宣言: 関数名の前にキーワード virtual を追加します。呼び出し: 基本クラスのポインターまたは参照を使用して、コンパイラーは派生クラスの適切な実装に動的にバインドします。実際のケース: 基本クラス Shape とその派生クラス Rectangle および Circle を定義することにより、ポリモーフィズムにおける仮想関数の適用を実証し、面積を計算し、形状を描画します。

C++ 中如何声明和调用虚函数?

#C

Virtual 関数は、派生クラスがその基本クラス Member のプロパティをオーバーライドできるようにするポリモーフィズム メカニズムです。機能。これにより、プログラマは基本クラスで共通の動作を定義しながら、派生クラスがその動作のインスタンス固有の実装を提供できるようになります。

仮想関数の宣言

仮想関数を宣言するには、関数名の先頭にキーワード

virtual を置きます。例:

class Base {
public:
    virtual void print() const;
};
ログイン後にコピー

仮想関数の呼び出し

仮想関数を呼び出し、基本クラスのポインターまたは参照を使用します。コンパイラは、派生クラスの適切な実装に動的にバインドします。例:

void doSomething(Base* base) {
    base->print();
}
ログイン後にコピー

実用的なケース

仮想関数の使用例を次に示します:

#include <iostream>

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

class Rectangle : public Shape {
public:
    Rectangle(double width, double height) : width_(width), height_(height) {}
    
    double area() const override { return width_ * height_; }
    void draw() const override { std::cout << "Drawing rectangle" << std::endl; }
    
private:
    double width_;
    double height_;
};

class Circle : public Shape {
public:
    Circle(double radius) : radius_(radius) {}
    
    double area() const override { return 3.14 * radius_ * radius_; }
    void draw() const override { std::cout << "Drawing circle" << std::endl; }
    
private:
    double radius_;
};

int main() {
    Shape* rectangle = new Rectangle(5, 10);
    Shape* circle = new Circle(5);
    
    std::cout << rectangle->area() << std::endl; // Output: 50
    std::cout << circle->area() << std::endl;   // Output: 78.5
    
    rectangle->draw();   // Output: Drawing rectangle
    circle->draw();     // Output: Drawing circle
    
    return 0;
}
ログイン後にコピー

以上がC++ で仮想関数を宣言して呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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