C++の継承に関する基本的な概念


  1. シンプルな継承の例:

    class Animal {
    public:
    void eat() {
        cout << "Animal is eating..." << endl;
    }
    };
    class Dog : public Animal {
    public:
    void bark() {
        cout << "Dog is barking..." << endl;
    }
    };
    int main() {
    Dog dog;
    dog.eat();  // Animalのメンバ関数を呼び出せる
    dog.bark();
    return 0;
    }

    この例では、Animalクラスをベースクラスとして、Dogクラスを派生クラスとして定義しています。DogクラスはAnimalクラスのメンバ関数であるeat()を継承しており、新たにbark()メンバ関数を追加しています。

  2. 仮想関数とポリモーフィズムの例:

    class Shape {
    public:
    virtual void draw() {
        cout << "Drawing a shape..." << endl;
    }
    };
    class Circle : public Shape {
    public:
    void draw() {
        cout << "Drawing a circle..." << endl;
    }
    };
    class Square : public Shape {
    public:
    void draw() {
        cout << "Drawing a square..." << endl;
    }
    };
    int main() {
    Shape* shape;
    Circle circle;
    Square square;
    shape = &circle;
    shape->draw();  // Circleクラスのdraw()が呼び出される
    shape = &square;
    shape->draw();  // Squareクラスのdraw()が呼び出される
    return 0;
    }

    この例では、Shapeクラスをベースクラスとして、CircleクラスとSquareクラスを派生クラスとして定義しています。Shapeクラスのdraw()関数を仮想関数として宣言し、派生クラスでオーバーライドしています。そして、ポインタを使って異なる派生クラスのオブジェクトを指し示し、仮想関数を呼び出すことでポリモーフィズムを実現しています。

これらの例は、C++の継承の基本的な概念を示しています。継承を使用することで、コードの再利用性や保守性を向上させることができます。さらに、ポリモーフィズムを活用することで、異なる派生クラスのオブジェクトを統一的に扱うことができます。