現在、c++ポケットリファレンスを使用して基本文法を学習していますが、文法の厳密な点がいくつかわかりません。
Struct S{ int data; int square (int v){ return v*v ;} }; int S::*d = &S::data; int (S::*f)(int) = &S::square; S s1; S s2; s1.*d = (s1.*f)(5);
メンバ変数へのポインタ宣言は
型 クラス名 :: *変数名 <=初期化子>;
メンバ関数へのポインタ宣言は
戻り値の型 (クラス名 :: *変数名)(仮引数リスト) <=初期化子>;
とあります。
int S::*d = &S::data;
①上記のコードで、クラスSの、オブジェクトdataのアドレスを &S::data と表すのは、どんな規則があるのでしょうか。
S::&data では、なぜダメなのかが分かりません。
②
s1.*d = (s1.*f)(5);
上記は、教科書では、実引数5でs1.square()が呼ばれ、結果がs1.data に代入される
とありましたが、「s1.d」の意味がよく分かりません。
クラスSで、オブジェクトs1を定義し、オブジェクトs1の中にdが格納されているということでしょうか。
以上お願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/02 20:22