私は混乱しています。私は、保護されたデータがC++の特定のクラスの子によって読み書き可能だと考えました。親クラスの保護されたデータは子クラスで使用できませんか?
以下のスニペットは、MSのコンパイラでコンパイルに失敗し
class A
{
protected:
int data;
};
class B : public A
{
public:
B(A &a)
{
data = a.data;
}
};
int main()
{
A a;
B b = a;
return 0;
}
エラーメッセージ:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
demoFail.cpp
demoFail.cpp(12) : error C2248: 'A::data' : cannot access protected member declared in class 'A'
demoFail.cpp(4) : see declaration of 'A::data'
demoFail.cpp(2) : see declaration of 'A'
は私が間違って何をしているのですか?
Umph。正確に言えば、このケースは問題を示すためのダミーケースです。私は実際に渡されるデータのかなり集中的な読書をしたいと思っていました。 –
いずれにしても、このAオブジェクトまたは別のBオブジェクトのA部分の保護されたデータだけで動き回ることができます。 AインスタンスまたはCインスタンスがAから派生している場合、BにはそれらのAsに対する特別な権利はありません。このアドバイスを受けられない場合(このBを、このBの基本部分にコピーしてコピーして、これにアクセスしてください)、より大きな画像が必要な設計上の問題が発生する可能性があります。回答。 – UncleBens
@rlbond:就寝時のストライキ後のコーディング。これは私の問題を解決しました。ありがとう。 :) –