C++におけるstructとclassキーワードの違い
C++におけるstructとclassキーワードの違い
この問題については、structとclassは「デフォルトのメンバーアクセス権」という点以外に何の違いもない(P 141、「高品質プログラム設計ガイドC++/C言語」第3版、改訂版)と言います.structのデフォルトのメンバーアクセス権はpublicで、classはprivateです.
実は、『C++Primer』(第4版)をよく見て、485ページに書いてあります.
「唯一の違いは、デフォルトのメンバー保護レベルとデフォルトの派生保護レベルだけで、他の違いはありません」.
structとclassのデフォルトの派生アクセス権の違いを無視する人が多い.
次のコードはstructとclassのデフォルトの継承方法の違いを説明します.
Private_DerivedクラスはBaseクラスのdataのアクセス権をprivateに変換したのでDerived_From_Privateクラス継承Private_Derivedクラスでは、dataメンバー変数は使用できません.コンパイル中にエラーが発生します.
参考資料:1、『C++Primer』(第4版)、P 485
この問題については、structとclassは「デフォルトのメンバーアクセス権」という点以外に何の違いもない(P 141、「高品質プログラム設計ガイドC++/C言語」第3版、改訂版)と言います.structのデフォルトのメンバーアクセス権はpublicで、classはprivateです.
実は、『C++Primer』(第4版)をよく見て、485ページに書いてあります.
「唯一の違いは、デフォルトのメンバー保護レベルとデフォルトの派生保護レベルだけで、他の違いはありません」.
structとclassのデフォルトの派生アクセス権の違いを無視する人が多い.
次のコードはstructとclassのデフォルトの継承方法の違いを説明します.
class Base {
public:
int data;
};
class Private_Derived : Base {
int test() {
return data;
}
};
// Use struct instead of class
struct Public_Derived : Base {
int test() {
return data;
}
};
class Derived_From_Private : Private_Derived {
int test() {
// Error: can't access Base::data
return data;
}
};
class Derived_From_Public : Public_Derived {
int test() {
return data;
}
};
Private_DerivedクラスはBaseクラスのdataのアクセス権をprivateに変換したのでDerived_From_Privateクラス継承Private_Derivedクラスでは、dataメンバー変数は使用できません.コンパイル中にエラーが発生します.
参考資料:1、『C++Primer』(第4版)、P 485