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のデフォルトの継承方法の違いを説明します.
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