BLOG ブログ

  1. Home
  2. ブログ
  3. C++のポインタと継承

C++のポインタと継承

こんにちは、企画設計室 ソフトIT担当です。
今回は、プログラミングやC++の学習を始めたばかりの方向けの記事になります。
少しでも参考になれば幸いです。



基本的な継承の仕組み

C++では、class を使ってオブジェクト指向のプログラミングが可能です。以下のコードは、Car という基底クラスを定義し、それを継承する Truck クラスと Bus クラスを作成する基本的なC++のコードです。

#include <iostream>
#include <string>

class Car
{
public:
    virtual void run()
    {
        std::cout << "車が走ります" << std::endl;
    }

    virtual ~Car() = default; // 仮想デストラクタ
};

class Truck : public Car
{
public:
    void run() override
    {
        std::cout << "トラックが走ります" << std::endl;
    }
};

class Bus : public Car
{
public:
    void run() override
    {
        std::cout << "バスが走ります" << std::endl;
    }
};

int main()
{
    Car *Car1 = new Truck;
    Car *Car2 = new Bus;

    Car1->run();
    Car2->run();

    delete Car1;
    delete Car2;

    return 0;
}


このコードでは、Car クラスの run() メソッドを virtual にし、派生クラスで override することで、基底クラスのポインタを通じて適切な run() メソッドが呼ばれるようになっています。


ポインタを使う理由


上記のコードでは Car *car1 = new truck; のように、基底クラスのポインタを使用して派生クラスのオブジェクトを作成しています。
なぜこのように書くのでしょうか?


ポリモーフィズムの実現

Car クラスのポインタを使うことで、TruckBus のインスタンスを同じ型として扱うことができます。
Car1->run(); を呼び出すと、Truckrun() が実行されます。- 同じrun();関数を用いて派生クラスごとの処理を行うことができるため、処理に統一感を持たせることが出来ます。


コードに柔軟性を持たせる

vector<Car*> のように、異なる派生クラスのオブジェクトを同じリストで管理できます。
– より多くの派生クラスを扱う際に、同じメソッドでそれぞれの派生クラスの処理を呼び出せるので便利です。


 

まとめ

C++のポインタと継承を学ぶことで、オブジェクト指向の柔軟な設計が可能になります。ポインタという概念は理解しづらい部分もありますが、是非この記事を参考にうまく活用してみてください。

詳細はこちら

PDFはこちら

一覧を見る