クラスの多重継承 準備編

ソーラー「クラスの多重継承を行う前に



1つのクラスの


クラスのメンバ変数宣言

クラスのメンバ変数宣言



別のクラスへ継承するタイプの


クラスの継承を行ってみたいと思います。」


マックス「そのタイプのクラスの継承は以前のエピソードで


登場してきたやつだな。」


ソーラー「


クラスRobotbody



クラスType1Robot


いう2つのクラスを用意します」



マックス「


クラスRobotbody



クラスType1Robot?


何して暮らす?


何のクラスだ」


ソーラー「・・・



1つ目のクラスRobotbodyは


ロボットの胴体につけられたナンバー

ロボットの胴体の縦の長さ

ロボットの胴体の横の長さ

ロボットの胴体の高さの長さ



とりあつかい


ロボットの胴体につけられたナンバー

ロボットの胴体の縦の長さ

ロボットの胴体の横の長さ

ロボットの胴体の高さの長さ


表示する機能をもつ


クラスです。


そう、ロボットの胴体に関しての情報を取り扱うクラスというわけです



クラスRobotbodyのクラス宣言と


そのメンバ関数の定義は


class Robotbody{


public:

int no; //変数noはクラスRobotbodyのメンバ変数とよばれます

public:

float tate; //変数tateはクラスRobotbodyのメンバ変数とよばれます

public:

float yoko; //変数yokoはクラスRobotbodyのメンバ変数とよばれます

public:

float takasa; //変数takasaはクラスRobotbodyのメンバ変数とよばれます



public:

void bodydatadisplay(); //自作関数 bodydatadisplay()はクラスRobotbodyのメンバ関数とよばれます


};



void Robotbody::bodydatadisplay() {


cout << "ロボットの胴体につけられたナンバーは" << no << "です" << "\n";

cout << "ロボットの胴体の縦の長さは" << tate << "メートルです" << "\n";

cout << "ロボットの胴体の横の長さは" << yoko << "メートルです" << "\n";

cout << "ロボットの胴体の高さの長さは" << takasa << "メートルです" << "\n";

}

//🌞クラスRobotbodyのメンバ関数となっている自作関数bodydatadisplay()の定義をおこなっています


とします。


そして


2つ目の


クラスType1Robotのクラス宣言と


そのメンバ関数の定義は


class Type1Robot{


/*🌞クラスType1Robotのメンバ変数宣言、メンバ関数宣言

は記述しません

ですので

クラスType1Robotのメンバ関数の定義がおこなわれることはありません🌞*/

};


マックス「クラスType1Robotのクラス宣言



class Type1Robot {



};



中身がからっぽだぞ


なんなんだ? このクラスは?」


てんC「もしかして


クラスRobotbody


から


クラスType1Robot



クラスの継承をおこなうことにより


クラスRobotbodyの


メンバ変数宣言


int no;

float tate;

float yoko;

float takasa;


メンバ関数宣言

void bodydatadisplay();


継承されるので


クラスType1Robotに


クラスType1Robot独自の


メンバ変数宣言

メンバ関数宣言


が何も記述されていなくてもといいということなのでしょうか?



いかがですか?



クラスRobotbodyの


メンバ変数宣言

int no;

float tate;

float yoko;

float takasa;


メンバ関数宣言

void bodydatadisplay();



クラスType1Robotの


メンバ変数宣言

メンバ関数宣言


として


継承されることになるのですか?」


ソーラー「そうなんだよ😊


Type1Robotとは


    Type1型のロボットのデータを取り扱うためのクラスなんです


では


Type1型のロボットとはどのようなロボットなのかということだよね



クラスType1Robotのクラス宣言には


メンバ変数宣言

メンバ関数宣言


が何も記述されていなかったよね


でも


クラスRobotbody

から

クラスType1Robot

クラスの継承を行なうことにより


クラスType1Robotは


ロボットの胴体につけられたナンバー

ロボットの胴体の縦の長さ

ロボットの胴体の横の長さ

ロボットの胴体の高さの長さ



とりあつかい


ロボットの胴体につけられたナンバー

ロボットの胴体の縦の長さ

ロボットの胴体の横の長さ

ロボットの胴体の高さの長さ


表示する機能をもつ


クラスになります


この


クラスType1Robotを用いれば


ロボットの胴体につけられたナンバー

ロボットの胴体の縦の長さ

ロボットの胴体の横の長さ

ロボットの胴体の高さの長さ



とりあつかい


ロボットの胴体につけられたナンバー

ロボットの胴体の縦の長さ

ロボットの胴体の横の長さ

ロボットの胴体の高さの長さ


表示することができるようになります


つまり


クラスType1Robotとは


継承するクラスに応じて


変化するクラスなんです



この場合


Type1型のロボットとは


ロボットの胴体につけられたナンバー

ロボットの胴体の縦の長さ

ロボットの胴体の横の長さ

ロボットの胴体の高さの長さ


を備えているロボットということになるね



そこで


実際に


クラスRobotbody


から


クラスType1Robot



クラスの継承をおこない


クラスType1Robot型のオブジェクトが用いられている


プログラムを実行してみようよ




#include <iostream>


using namespace std;



class Robotbody{


public:

int no; //変数noはクラスRobotbodyのメンバ変数とよばれます

public:

float tate; //変数tateはクラスRobotbodyのメンバ変数とよばれます

public:

float yoko; //変数yokoはクラスRobotbodyのメンバ変数とよばれます

public:

float takasa; //変数takasaはクラスRobotbodyのメンバ変数とよばれます



public:

void bodydatadisplay(); //自作関数void bodydatadisplay()はクラスRobotbodyのメンバ関数とよばれます


};



void Robotbody::bodydatadisplay() {


cout << "ロボットの胴体につけられたナンバーは" << no << "です" << "\n";

cout << "ロボットの胴体の縦の長さは" << tate << "メートルです" << "\n";

cout << "ロボットの胴体の横の長さは" << yoko << "メートルです" << "\n";

cout << "ロボットの胴体の高さの長さは" << takasa << "メートルです" << "\n";

}

//クラスRobotbodyのメンバ関数となっている自作関数bodydatadisplay()の定義をおこなっています



class Type1Robot: public Robotbody {


/*🌞クラスRobotbodyからクラスType1Robot

へクラスの継承が行われています


クラスType1Robotのメンバ変数宣言、メンバ関数宣言

は記述していません

ですので

クラスType1Robotのメンバ関数の定義がおこなわれることはありません🌞*/

};



int main() {



Type1Robot robotMIRA;


robotMIRA.no=1;

robotMIRA.tate = 1.0;

robotMIRA.yoko = 1.0;

robotMIRA.takasa = 1.0;


robotMIRA.bodydatadisplay();


return 0;

}


プログラムの実行結果


1

1.0

1.0

1.0





マックス「このプログラムでは


クラスRobotbody


から


クラスType1Robot


クラスRobotbodyの


メンバ変数宣言

メンバ関数宣言



継承されているんだろう?


そこはわかる



この


robotMIRAのType1Robot型のオブジェクト宣言


Type1Robot robotMIRA;


ってなんじゃらほ~いぃ」




ソーラー「いま


ミラという名前のロボットのデータ


胴体につけられたナンバー  1

胴体の縦の長さ 1.0

胴体の横の長さ 1.0

胴体の高さの長さ 1.0



クラスType1Robot型のオブジェクトrobotMIRAを用いて取り扱おうとしています


ですので


robotMIRAのType1Robot型のオブジェクト宣言


Type1Robot robotMIRA;


を実行しています


robotMIRA


とは


ロボット ミラ


のことを表しています



🍓robotMIRAのType1Robot型🍓のオブジェクト宣言


Type1Robot robotMIRA;


を実行すると


🍓Type1Robot型のオブジェクトrobotMIRAのメンバ変数🍓


robotMIRA.no

robotMIRA.tate

robotMIRA.yoko

robotMIRA.takasa


🍓Type1Robot型のオブジェクトrobotMIRAのメンバ関数🍓


robotMIRA.bodydatadisplay()


が生成されるので


ロボット ミラの


胴体につけられたナンバー  1

胴体の縦の長さ 1.0

胴体の横の長さ 1.0

胴体の高さの長さ 1.0



🍓Type1Robot型のオブジェクトrobotMIRAのメンバ変数🍓


robotMIRA.no

robotMIRA.tate

robotMIRA.yoko

robotMIRA.takasa





robotMIRA.no=1;

robotMIRA.tate = 1.0;

robotMIRA.yoko = 1.0;

robotMIRA.takasa = 1.0;


と代入することができ


🍓Type1Robot型のオブジェクトrobotMIRAのメンバ関数🍓


robotMIRA.bodydatadisplay();


を実行することにより


コマンドプロンプト画面に


1

1.0

1.0

1.0


を表示させることができます」


ソーラー「


このクラスType1Robotのように


クラスType1Robotのクラス宣言のなかに


何も


メンバ変数宣言

メンバ関数宣言


が記述されていなくても


別のクラス


Robotbodyの


メンバ変数宣言


int no;

float tate;

float yoko;

float takasa;



メンバ関数宣言


void bodydatadisplay();



継承して


自分のクラスの


メンバ変数宣言

メンバ関数宣言


とすることにより


このクラスType1Robotを用いて


ロボットの胴体につけられたナンバー

ロボットの胴体の縦の長さ

ロボットの胴体の横の長さ

ロボットの胴体の高さの長さ



とりあつかい


ロボットの胴体につけられたナンバー

ロボットの胴体の縦の長さ

ロボットの胴体の横の長さ

ロボットの胴体の高さの長さ


表示するようにすることができます」


マックス「ということは


たくさんのクラスを継承すれば


どんどん


クラスType1Robot


の機能がアップすることにならないか?」




  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る