c++
1class base 2{ 3protected: 4 int a=0; 5}; 6 7class base2 : public base 8{ 9public: 10 void A(base *b) 11 { 12 printf("%d", b->a); 13 } 14}; 15
上記のようなコード(実際には、ヘッダーとソースファイルに分けてあります)をビルドしようとしたところ、”baseで宣言されているprotectedメンバーのaにはポインタ及びオブジェクトから参照できない”というむねのエラーコードを吐き、ビルドできませんでした。
以前
c++
1class base 2{ 3private: 4 int a=0; 5 6public: 7 void A(base *b) 8 { 9 printf("%d", b->a); 10 } 11};
という感じのコードはビルドできていたので、てっきり前者のコードもビルドできると勘違いしていました。
ここで質問なのですが、前者のようなコードはどうしてビルドできないのでしょうか?
protectedとはそのフィールドを持つクラスから派生したクラスにおいてアクセス可能ということを示すものではないのでしょうか?
解説をお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/11/23 14:32