C++ における動的ポリモーフィズムの実装

C++C++Beginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、C++ におけるポリモーフィズムの概念を実装します。ポリモーフィズムは、オブジェクト指向プログラミングの概念であり、単一の関数をさまざまな方法で使用できることを意味します。ポリモーフィズムには 2 種類あります。コンパイル時ポリモーフィズム(静的ポリモーフィズム)と実行時ポリモーフィズム(動的ポリモーフィズム)です。この実験では、実行時または動的ポリモーフィズムに焦点を当てます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL cpp(("C++")) -.-> cpp/OOPGroup(["OOP"]) cpp(("C++")) -.-> cpp/IOandFileHandlingGroup(["I/O and File Handling"]) cpp(("C++")) -.-> cpp/SyntaxandStyleGroup(["Syntax and Style"]) cpp/OOPGroup -.-> cpp/classes_objects("Classes/Objects") cpp/OOPGroup -.-> cpp/class_methods("Class Methods") cpp/OOPGroup -.-> cpp/inheritance("Inheritance") cpp/OOPGroup -.-> cpp/polymorphism("Polymorphism") cpp/IOandFileHandlingGroup -.-> cpp/output("Output") cpp/IOandFileHandlingGroup -.-> cpp/files("Files") cpp/SyntaxandStyleGroup -.-> cpp/code_formatting("Code Formatting") subgraph Lab Skills cpp/classes_objects -.-> lab-96154{{"C++ における動的ポリモーフィズムの実装"}} cpp/class_methods -.-> lab-96154{{"C++ における動的ポリモーフィズムの実装"}} cpp/inheritance -.-> lab-96154{{"C++ における動的ポリモーフィズムの実装"}} cpp/polymorphism -.-> lab-96154{{"C++ における動的ポリモーフィズムの実装"}} cpp/output -.-> lab-96154{{"C++ における動的ポリモーフィズムの実装"}} cpp/files -.-> lab-96154{{"C++ における動的ポリモーフィズムの実装"}} cpp/code_formatting -.-> lab-96154{{"C++ における動的ポリモーフィズムの実装"}} end

新しい main.cpp ファイルを作成する

まず、~/project ディレクトリに新しい C++ ファイル main.cpp を作成します。

$ cd ~/project
$ touch main.cpp

ポリモーフィズムを実装するためのコードを追加する

このステップでは、Shape という名前のクラスを作成します。Shape クラスには、area() という名前の仮想関数があります。次に、Shape クラスを継承し、仮想 area() 関数をオーバーライドする RectangleTriangle の 2 つのクラスを作成します。クラスを作成したら、Shape クラスのオブジェクトの配列を作成し、その配列をループして各オブジェクトの area() 関数を呼び出します。

#include <iostream>
using namespace std;

class Shape {
    public:
        virtual float area() {
            return 0;
        }
};

class Rectangle: public Shape {
    public:
        float area() {
            cout << "Rectangle class area()" << endl;
            return 0;
        }
};

class Triangle: public Shape {
    public:
        float area() {
            cout << "Triangle class area()" << endl;
            return 0;
        }
};

int main() {
    Shape *shape;
    Rectangle rec;
    Triangle tri;

    shape = &rec;
    shape->area();

    shape = &tri;
    shape->area();

    return 0;
}

コードをコンパイルして実行する

このステップでは、以下のコマンドを使用してコードをコンパイルして実行します。

$ g++ main.cpp -o main
$./main

上記のプログラムの出力は以下の通りです。

Rectangle class area()
Triangle class area()

まとめ

この実験では、C++ におけるポリモーフィズムの概念をどのように実装するかを学びました。Shape という名前の仮想関数を持つクラスを作成しました。次に、Shape クラスを継承し、仮想関数 area() をオーバーライドする RectangleTriangle の 2 つのクラスを作成しました。最後に、RectangleTriangle クラスのオブジェクトを作成し、基底クラス Shape のオブジェクトを使用して area() 関数を呼び出しました。これにより、それぞれのクラスの関数が呼び出されました。