🌻天国にいけるC++言語入門🌻 進化し続けるオブジェクト指向プログラミング ver3.2307
クラスの静的メンバ変数をデフォルト引数に設定してもオブジェクトの静的メンバ変数を初期化することはできません
クラスの静的メンバ変数をデフォルト引数に設定してもオブジェクトの静的メンバ変数を初期化することはできません
つづき・・・
ソーラー「ところで
もう1度
クラスの静的メンバ変数宣言がもちいられたプログラムを実行してみましょう。
#include <iostream>
using namespace std;
class Cube {
public:
int no; //変数noはクラスCubeのメンバ変数とよばれます
public:
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
public:
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
public:
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
public:
Cube();
/*🌞🌞🌞クラスCubeのコンストラクタCube() のメンバ関数宣言を行っています*/
public:
void display(); //自作関数display()のクラスCubeのメンバ関数宣言を行っています
public:
static int a;
/*🌞🌞🌞ここですよ~ん🌞🌞🌞
aのクラスCubeの静的メンバ変数宣言を行っています*/
};
Cube::Cube() {
no = 0;
tate = 0;
yoko = 0;
takasa = 0;
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
}
/*👆🌞
クラスCubeのコンストラク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のコンストラクタが自動的に実行されています*/
cube1.a = 0;
cout << "cube1.aは" << cube1.a << "に初期化されました" << "\n";
return 0;
}
プログラムの実行結果
エラー LNK2001 外部シンボル ""public: static int Cube::a" (?a@Cube@@2HA)" は未解決です。
エラー LNK1120 1 件の未解決の外部参照
マックス「このプログラムのように
クラスCubeの静的メンバ変数宣言
static int a;
を設定すると
ビルドエラーが表示されるか・・・
結局
Cube cube1;
により
生成される
クラスCube型のオブジェクトcube1の静的メンバ変数
cube1.aを初期化できないんじゃ
クラスCubeの静的メンバ変数宣言
static int a;
を実行しても意味ないじゃんか」
マックス「オブジェクトcube1の静的メンバ変数
cube1.aを初期化・・・
初期化する方法か・・・
・・・・・・・・・・・・・
あっわかった!
クラス宣言内で
静的メンバ変数宣言
static int a;
を行っているが
そのとき
静的メンバ変数宣言,初期化
static int a=0;
を
同時に行ったらいいんじゃないか?」
ソーラー「ああ、いい
そのアイデア」
マックス「ふっ
そうか
そうだろう そうだろう
今度は
Cubeのクラス宣言内で
aの静的メンバ変数宣言,初期化
static int a=0;
を
おこなったプログラムを
実行してみるか
そうだな
試しに
Cubeのクラス宣言内で
aの静的メンバ変数宣言,初期化
static int a=0;
を設定し
main関数内で
オブジェクト宣言
Cube cube1;
を
実行してみるか😸」
#include <iostream>
using namespace std;
class Cube{
public:
int no; //変数noはクラスCubeのメンバ変数とよばれます
public:
float tate; //変数tateはクラスCubeのメンバ変数とよばれます
public:
float yoko; //変数yokoはクラスCubeのメンバ変数とよばれます
public:
float takasa; //変数takasaはクラスCubeのメンバ変数とよばれます
public:
Cube();
/*🌞🌞🌞クラスCubeのコンストラクタCube() のメンバ関数宣言を行っています*/
public:
void display(); //自作関数display()のクラスCubeのメンバ関数宣言を行っています
public:
static int a = 0;
/*🌞🌞🌞ここですよ~ん🌞🌞🌞
aのクラスCubeの静的メンバ変数宣言を行っています*/
};
Cube::Cube() {
no = 0;
tate = 0;
yoko = 0;
takasa = 0;
cout << "生成されたオブジェクトのメンバ変数を初期化しました" << "\n";
}
/*👆🌞
クラスCubeのコンストラクタ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のコンストラクタが自動的に実行されています*/
cout << "立方体につけられたナンバーは" << cube1.no << "です" << "\n";
cout << "立方体の縦の長さは" << cube1.tate << "です" << "\n";
cout << "立方体の横の長さは" << cube1.yoko << "です" << "\n";
cout << "立方体の高さの長さは" << cube1.takasa << "です" << "\n";
return 0;
}
プログラムの実行結果
エラー (アクティブ) E1592 in-class initializer のあるメンバーは const である必要があります
エラー C2864 'Cube::a': in-class initializer を持つ静的 データ メンバー には、非揮発性 const integral 型が必要です
マックス「なんだ
このエラー文は・・・
Cubeのクラス宣言内で
static int a = 0;
を実行したために
このエラー文が表示されたのか・・・
static int a = 0;
と記述することができないとなると…
もうクラスCube型のオブジェクトcube1の静的メンバ変数
cube1.a
を初期化する方法をおもいつかないぞ」
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます