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
クラスのポインタを使うことで、Truck
や Bus
のインスタンスを同じ型として扱うことができます。
– Car1->run();
を呼び出すと、Truck
の run()
が実行されます。- 同じrun();関数を用いて派生クラスごとの処理を行うことができるため、処理に統一感を持たせることが出来ます。
・ コードに柔軟性を持たせる
– vector<Car*>
のように、異なる派生クラスのオブジェクトを同じリストで管理できます。
– より多くの派生クラスを扱う際に、同じメソッドでそれぞれの派生クラスの処理を呼び出せるので便利です。
まとめ
C++のポインタと継承を学ぶことで、オブジェクト指向の柔軟な設計が可能になります。ポインタという概念は理解しづらい部分もありますが、是非この記事を参考にうまく活用してみてください。
詳細はこちら