クラスの世界で遊んで妙(みよう)!クラスの鑑賞会を実施しています イマジネーションをはばたかせ、じっくりクラスの構造をお抹茶とともに味わってみよう~
main関数内でクラス宣言は実行できるのかな?
あたりには静けさが満ちわたっています
ソーラー「いい景色だね
#include <iostream>
using namespace std;
class Cube {
public: // (アクセス指定子)
int no; //変数noはクラスCubeのメンバ変数とよばれます
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます
};
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
//👆クラスCubeのメンバ関数となっている自作関数display()の定義をおこなっています
int main() {
Cube cube1;
//👆cube1のクラスCube型のオブジェクト宣言をおこなっています
cube1.no = 1;
cube1.tate = 2.0;
cube1.yoko = 3.0;
cube1.takasa = 4.0;
cube1.display();
return 0;
}
ビルド実行結果
立方体につけられたナンバーは1です
立方体の縦の長さは2です
立方体の横の長さは3です
立方体の高さの長さは4です
ソーラー「さあ このお茶とお菓子を召し上がり下さい」
かっぽ~ん
どこからか鹿威しの音色が聞こえてきます。
マックス「どれ、どれ
んまいじゃないか
今日はどうしたことなんだ」
最中をつまむマックス
てんC「綺麗な庭園ですね こんな場所があったんですね
なんだか和みます」
ソーラー「今日は クラスの鑑賞会と
いこうというわけなんだ。
今までは説明ばっかりだったからね。」
マックス「ほほう 鑑賞会か
たった1本の枝から松や柿の木を想像してみたてるというわけか」
ソーラー「世界を自分の中で想像して構築してみるというのは
とても大切な作業ですからね。」
ソーラー「さて
どこから鑑賞していきましょうか?」
マックス「やっぱ
これ👇
public: // (アクセス指定子)
だろう
まだ 説明されてないぞ」
ソーラー「それは・・・
簡単すぎるので 無視です。」
マックス「簡単なのか・・・」
かっぽ~~~~~ん
てんC「気になるといえば
プログラムの中の
クラス宣言の部分と
main関数の部分の関係ですね。
main関数内では
Cube cube1;
と
cube1のクラスCube型のオブジェクト宣言がおこなわれています
ということは
cube1のクラスCube型のオブジェクト宣言が
行われる前に
Cubeのクラス宣言がおこなわれている必要があります。
それで
main関数の前に
Cubeのクラス宣言が記述されているのですね。
となると
main関数の前でなく
🍋main関数内で🍋
cube1のクラスCube型のオブジェクト宣言を行う
Cube cube1;
の前に
Cubeのクラス宣言をおこなっても
cube1のクラスCube型のオブジェクト宣言
Cube cube1;
を実行できるのではないでしょうか?」
おずおずと頭をさげるてんC。
ソーラー「てんC 100風流ポイ~ント🌞」
マックス「おおぅ なんて優雅な考察だ
むぅぅ
まったく気付きもしなかったぜぃ」
🌞 🌞 🌞 🌞 🌞 🌞 🌞 🌞
そうですね。
クラス宣言の真新しさに
そのような基本的なことに気づいていませんでした。
solarplexussより
🌞 🌞 🌞 🌞 🌞 🌞 🌞 🌞
ソーラー「
それでは
早速ですが
main関数の前でなく
🍋main関数内で🍋
Cubeのクラス宣言をおこなってみたいとおもいます(*^▽^*)
行う位置は
Cube cube1;
の前ですね
main関数内で
Cube cube1;
の前に
Cubeのクラス宣言をおこなった場合でも
cube1のクラスCube型のオブジェクト宣言
Cube cube1;
を実行できるかどうか確かめてみます
そのプログラムはこちらです
👇
#include <iostream>
using namespace std;
int main() {
class Cube {
public: // (アクセス指定子)
int no; //変数noはクラスCubeのメンバ変数とよばれます
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます
};
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
//👆クラスCubeのメンバ関数となっている自作関数display()の定義もおこなっています
Cube cube1;
//👆cube1のクラスCube型のオブジェクト宣言をおこなっています
cube1.no = 1;
cube1.tate = 2.0;
cube1.yoko = 3.0;
cube1.takasa = 4.0;
cube1.display();
return 0;
}
ビルド実行結果
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
識別子 "cube1" が定義されていません
エラー (アクティブ) E0392 メンバー関数 "Cube::display" をそのクラスの外側で再宣言することはできません
エラー C2601 'main::Cube::display': ローカル関数の定義が正しくありません。
エラー (アクティブ) E0065 ';' が必要です
ソーラー「あれっ うまく実行できないね
識別子 "cube1" が定義されていません
ということは
cube1が何を意味しているか
コンパイラはわからないということかな?
つまり
cube1がクラスCube型のオブジェクトと判断されていないということだよね
ということは
main関数内で記述された
Cubeのクラス宣言は無効っていうことになるのかな?
Cubeのクラス宣言は
main関数内で実行できないのかな??
そして
エラー (アクティブ) E0392 メンバー関数 "Cube::display" をそのクラスの外側で再宣言することはできません
エラー C2601 'main::Cube::display': ローカル関数の定義が正しくありません。
が表示されているということは
クラスCubeのメンバ関数display()の定義されている場所
この場合 main関数内に
Cubeのメンバ関数display()の定義が記述されていることに問題があるのかな?」
マックス「おお いい・・・
そうだな
だったらまずは
クラスCubeのメンバ関数display()の定義
👇
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
👆
を取り除いたら
main関数内で
Cubeのクラス宣言だけは実行できたりするんじゃないか?」
ソーラー「それは いいアイデアですね
そっか
じゃあ main関数内から
クラスCubeのメンバ関数display()の定義
👇
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
を取り除いたプログラムを実行してみたいと思います
そのプログラムはこちらです
👇
#include <iostream>
using namespace std;
int main() {
class Cube {
public: // (アクセス指定子)
int no; //変数noはクラスCubeのメンバ変数とよばれます
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます
};
Cube cube1;
//👆cube1のクラスCube型のオブジェクト宣言をおこなっています
cube1.no = 1;
cube1.tate = 2.0;
cube1.yoko = 3.0;
cube1.takasa = 4.0;
cube1.display();
return 0;
}
ビルド実行結果
エラー C3640 'main::Cube::display': ローカル クラスの、参照されたまたは仮想メンバー関数は定義されなければなりません
ソーラー「あっ エラーが減った( ^ω^)・・・
'main::Cube::display': ローカル クラスの、参照されたまたは仮想メンバー関数は定義されなければなりません
か・・・・・
どういう意味なんだろう?
どうやら
クラスCubeのメンバ関数宣言
void display();
の定義が記述されていません
ていうことみたいだね・・・
う~ん
それにしても
このエラー表示いい味出しているね
ローカル クラスの
参照されたまたは仮想メンバー関数
詩的だね」
てんC「
クラスCubeのメンバ関数宣言
void display();
の定義が記述されていません
という意味合いであれば
main関数の外で
クラスCubeのメンバ関数宣言
void display();
の定義
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
を記述すれば
もしかしたらプログラムを実行できるようになるかもしれません」
ソーラー「それもいいね
名案だね。コンパイラも歓喜の声をあげて喜ぶかも
」
マックス「それも 渋いな」
そのプログラムはこちらです
👇
#include <iostream>
using namespace std;
int main() {
class Cube {
public: // (アクセス指定子)
int no; //変数noはクラスCubeのメンバ変数とよばれます
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます
};
Cube cube1;
//👆cube1のクラスCube型のオブジェクト宣言をおこなっています
cube1.no = 1;
cube1.tate = 2.0;
cube1.yoko = 3.0;
cube1.takasa = 4.0;
cube1.display();
return 0;
}
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
ビルド実行結果
エラー (アクティブ) E0020 識別子 "yoko" が定義されていません
エラー (アクティブ) E0020 識別子 "tate" が定義されていません
エラー (アクティブ) E0020 識別子 "takasa" が定義されていません
エラー (アクティブ) E0020 識別子 "no" が定義されていません
エラー (アクティブ) E0276 名前の後に '::~' を付けることができるのはクラス名または名前空間名だけです
エラー C2065 'yoko': 定義されていない識別子です。
エラー C2065 'tate': 定義されていない識別子です。
エラー C2065 'takasa': 定義されていない識別子です。
エラー C2065 'no': 定義されていない識別子です。
エラー C3640 'main::Cube::display': ローカル クラスの、参照されたまたは仮想メンバー関数は定義されなければなりません
エラー C2653 'Cube': 識別子がクラス名でも名前空間名でもありません。
ソーラー「わわ エラー文が増えた
エラー (アクティブ) E0020 識別子 "yoko" が定義されていません
エラー (アクティブ) E0020 識別子 "tate" が定義されていません
エラー (アクティブ) E0020 識別子 "takasa" が定義されていません
エラー (アクティブ) E0020 識別子 "no" が定義されていません
が表示されちゃったね
そうか
クラスCubeのメンバ関数宣言
void display();
の定義
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
で使用されている
no
tate
yoko
takasa
が定義されていないことをコンパイラによって指摘されているね
鑑賞し甲斐があるね いいね
かっぽ~~~~~ん
main関数内で
Cubeのクラス宣言
class Cube {
public: // (アクセス指定子)
int no; //変数noはクラスCubeのメンバ変数とよばれます
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
void display(); //自作関数display()はクラスCubeのメンバ関数とよばれます
};
が実行されても
main関数の外には効力がおよばず
no
tate
yoko
takasa
は定義されていないことになるんだね」
最中をつまむソーラー
マックス「なるほど・・・
だったら
もう これだな( ̄ー ̄)ニヤリ
Cubeのクラス宣言は
メンバ関数宣言
void display(); を取り除いて
class Cube {
public: // (アクセス指定子)
int no; //変数noはクラスCubeのメンバ変数とよばれます
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
};
とし
クラスCubeのメンバ関数
display()
の定義
void Cube::display() {
cout << "立方体につけられたナンバーは" << no << "です" << "\n";
cout << "立方体の縦の長さは" << tate << "です" << "\n";
cout << "立方体の横の長さは" << yoko << "です" << "\n";
cout << "立方体の高さの長さは" << takasa << "です" << "\n";
}
も消してしまうのだあ」
かっぽ~~~~~ん
マックス「
ついでに
main関数内の
cube1.display();
も消す
つまり
Cubeのメンバ関数display()
が関係してくる部分は全部とりのぞいてしまえば
プログラムを実行できるんじゃないか?」
ソーラー「ああ・・・・・
なんて
奥ゆかしい・・・
素直で正直な美しさ・・・
それもいい案ですね」
そのプログラムはこちらになります
👇
#include <iostream>
using namespace std;
int main() {
class Cube {
public: // (アクセス指定子)
int no; //変数noはクラスCubeのメンバ変数とよばれます
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
};
Cube cube1;
//👆cube1のクラスCube型のオブジェクト宣言をおこなっています
cube1.no = 1;
cube1.tate = 2.0;
cube1.yoko = 3.0;
cube1.takasa = 4.0;
return 0;
}
ビルド実行結果
何も表示されませんがビルド実行に成功しています
ソーラー「やったね
ビルド実行に成功!
このときの
Cubeのクラス宣言は
👇
class Cube {
public: // (アクセス指定子)
int no; //変数noはクラスCubeのメンバ変数とよばれます
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
};
👆
メンバ変数宣言だけが記述されているね
どうやら
メンバ変数宣言だけが記述されているクラス宣言はmain関数内で実行できるみたいだね
お茶会
楽しいな~~
イマジネーションが尽きないね」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます