クラスの多重継承 準備編
ソーラー「クラスの多重継承を行う前に
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
の機能がアップすることにならないか?」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます