C++でTriangleクラスとIsoscelesクラスを使って継承をテストするプログラム
C++におけるクラス継承の基本動作を、Triangle(三角形)クラスとその子クラスであるIsosceles(二等辺三角形)クラスを作成して確認してみましょう。
Triangleクラスには「このオブジェクトは三角形です」と出力する関数を持たせます。一方、Isoscelesクラスには「二等辺三角形であること」を示す関数と、その特徴を説明する関数の2つを定義します。さらに重要なポイントとして、子クラスのオブジェクトから親クラスの関数を呼び出せることも併せて確認します。
今回のプログラムでは特別な入力は不要で、各関数を適切な順序で呼び出すだけです。例えば、trgというオブジェクトを生成し、trg.isosceles()、trg.description()、trg.triangle()の順に呼び出すと、出力は以下のようになります。
This is an isosceles triangle
There are two sides are equal in an isosceles triangle
This is a triangle
解決のための手順
この問題を解くには、以下の手順に従います。
- まずTriangleクラスを定義し、
triangle()関数をpublicとして公開する - Isoscelesクラスをpublic継承で定義し、
isosceles()とdescription()の2つのメソッドを実装する
コード例
それでは、実際の実装例を見て理解を深めましょう。
#include <iostream>
using namespace std;
class Triangle{
public:
void triangle(){
cout<<"This is a triangle" << endl;
}
};
class Isosceles : public Triangle{
public:
void isosceles(){
cout<<"This is an isosceles triangle" << endl;
}
void description(){
cout<<"There are two sides are equal in an isosceles triangle" << endl;
}
};
int main(){
Isosceles trg;
trg.isosceles();
trg.description();
trg.triangle();
}
入力
Isosceles trg;
trg.isosceles();
trg.description();
trg.triangle();
出力
This is an isosceles triangle
There are two sides are equal in an isosceles triangle
This is a triangle
解説
このプログラムのポイントは、class Isosceles : public Triangleという記述によるpublic継承です。これにより、IsoscelesクラスはTriangleクラスのpublicメンバをすべて受け継ぎます。
そのため、main関数内でIsosceles型のオブジェクトtrgに対して、自分自身が持つisosceles()やdescription()だけでなく、親クラスであるTriangleクラスのtriangle()も直接呼び出すことができます。これはオブジェクト指向プログラミングにおける「is-a関係」(二等辺三角形は三角形の一種である)を自然に表現した例といえます。
-
C++で正三角形の外接円の面積を計算するプログラム
正三角形とは、3つの辺の長さがすべて等しく、内角がすべて60度である三角形のことです。正多角形の一種であるため、「正三角形(regular triangle)」とも呼ばれています。正三角形の性質3辺の長さがすべて等しいすべての内角が同じ角度(60度)である外接円とは多角形の外接円(circumcircle)とは、その多角形のすべての頂点を通る円のことです。この円の半径は「外接半径(circumradius)」と呼ばれ、円の中心は「外心(circumcenter)」と呼ばれます。外心は三角形の内部にある場合もあれば、外部にある場合もあります。なお、正三角形の場合、外接円の半径は「a/√3」(aは
-
【C++入門】多重継承の基本と実装方法をわかりやすく解説
多重継承(Multiple Inheritance)とは多重継承とは、ひとつのクラスが複数の基底クラス(親クラス)から派生する仕組みのことです。多重継承を利用することで、派生クラスは複数の基底クラスが持つ機能やデータメンバをまとめて引き継ぐことができます。これはC++に代表されるオブジェクト指向プログラミング言語における重要な機能のひとつです。多重継承の構造を表した図が以下になります。C++で多重継承を実装するサンプルプログラムここでは、C++で多重継承を実装したサンプルプログラムを紹介します。クラスCが、クラスAとクラスBの2つのクラスを同時に継承する例です。サンプルコード#include