C++にも構造体があるが、クラスとの違いで代表的なのは、クラスのデフォルトのメンバアクセスがprivateなのに対し、構造体のデフォルトのメンバアクセスがpublicであること・・・。
struct_test.hで、
アクセス指定子を付けずにメンバを用意・・・。
(C++では、構造体でもメンバ関数を使えるし、構造体タグが不要なところがC言語と違う・・・。)
struct_test.cppは、
こんな感じ・・・、
class_test.hは、
// クラスclass_testの定義. class class_test{ // テストクラス // アクセス指定子を付けずにメンバを宣言. int num; // メンバ変数num. void show(); // メンバ関数show. };
class_test.cppは、
で、main.cppは、
しかし、コンパイルすると、
$ g++ -o main main.cpp struct_test.cpp class_test.cpp In file included from main.cpp:6:0: class_test.h: 関数 ‘int main()’ 内: class_test.h:5:7: エラー: ‘int class_test::num’ は非公開です int num; // メンバ変数num. ^ main.cpp:20:6: エラー: within this context ct.num = 20; // ct.numに20を代入. ^ In file included from main.cpp:6:0: class_test.h:6:8: エラー: ‘void class_test::show()’ は非公開です void show(); // メンバ関数show. ^ main.cpp:21:11: エラー: within this context ct.show(); // ct.showで出力. ^ $
class_testのメンバが非公開なのでアクセスできない・・・。
一方、struct_testはエラーが出ない・・・。もともとデフォルトで公開なので問題ない・・・。
class_test.hに、
publicをつければ、コンパイル出来て、
$ g++ -o main main.cpp struct_test.cpp class_test.cpp $ ./main struct_test.num = 10 class_test.num = 20 $
こうなる・・・。
Sample/cpp/struct/struct/src/struct at master · bg1bgst333/Sample · GitHub