[解決済み] C++、コンストラクタの後のコロンはどういう意味ですか?[重複]です。
2022-01-30 01:09:52
質問
重複の可能性があります。
コンストラクタのコロンの後の変数
C++のコンストラクタの構文に関する質問 (noob)
私はここにいくつかのC++のコードを持っています。
class demo
{
private:
unsigned char len, *dat;
public:
demo(unsigned char le = 5, unsigned char default) : len(le)
{
dat = new char[len];
for (int i = 0; i <= le; i++)
dat[i] = default;
}
void ~demo(void)
{
delete [] *dat;
}
};
class newdemo : public demo
{
private:
int *dat1;
public:
newdemo(void) : demo(0, 0)
{
*dat1 = 0;
return 0;
}
};
質問なのですが
: len(le)
と
: demo(0, 0)
が呼び出されるのですか?
継承に関わることなのでしょうか?
解決方法は?
他の方もおっしゃっていますが、初期化リストです。2つのことに使えます。
- ベースクラスのコンストラクタを呼び出す
- コンストラクタ本体が実行される前に、メンバ変数を初期化する。
ケース1について、あなたは継承を理解していると思います(そうでない場合は、コメントで教えてください)。つまり、単にベースクラスのコンストラクタを呼び出しているだけなのです。
ケース 2 では、「なぜコンストラクタの本体で初期化しないのか」という疑問が湧くかもしれません。
const
メンバになります。例えば、次のような状況を見てみましょう。
m_val
コンストラクタのパラメータを元に
class Demo
{
Demo(int& val)
{
m_val = val;
}
private:
const int& m_val;
};
C++の仕様では、これは違法です。の値を変更することはできません。
const
変数はコンストラクタで使用されます。そこで、初期化リストを使用することができます。
class Demo
{
Demo(int& val) : m_val(val)
{
}
private:
const int& m_val;
};
constメンバ変数を変更できるのは、このときだけです。また、Michaelがコメント欄で指摘しているように、クラスメンバである参照を初期化する唯一の方法でもあります。
を初期化するために使用する以外では
const
この方法は、変数を初期化する方法として一般的に受け入れられているようで、あなたのコードを読む他のプログラマーにも明らかです。
関連
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] ルール・オブ・スリーとは?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] C++11のT&&(ダブルアンパサンド)の意味とは?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー