構造体

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