class と struct

class と struct はデフォルトのアクセス指定が private か public かという違いがあるだけで、本質的に同じものです。以上。


というだけでは寂しいので、証拠をば。

#include <iostream>
using namespace std;

class hoge;   // hoge を 'class' と宣言
struct fuga;  // fuga は 'struct' と宣言

// 'class' と宣言した hoge を 'struct' として定義
struct hoge
{
  // 'struct' として宣言した fuga を class として friend 宣言
  friend class fuga;
  
  void foo() { cout << "foo!\n"; }
  
};

// 'struct' と宣言した fuga を 'class' として定義
class fuga
{
  // friend 宣言で struct を使うことも出来る
  friend struct hoge;
  
 public:
  void foo() { hoge().foo(); }
  
};

int main()
{
  fuga f;
  f.foo();
}

こういうコードも、問題なくコンパイル通ります。
ちなみに個人的には struct の方が好きだったり