構造体で private を使う

構造体で private 領域とメンバ関数を使います。
ここまで来ると Object Class と呼ぶ方が相応しいかも知れません。

前田稔の超初心者のプログラム入門

プログラムの説明

  1. public 領域と private 領域は新しく取り入れられたC++の機能です。
    public はどこからでも自由に参照できるのに対して、private は決められた場所からしか参照できません。
    struct では規定値は public になっています。
    main() から sum を参照しようとするとエラーが表示されます。
    Public.cpp
    Public.cpp(34) : error C2248: 'TData::sum' : private メンバ (クラス 'TData' で宣言されている) にアクセスできません。
    
    /*★ struct → Class     前田 稔 ★*/
    #include <stdio.h>
    #include <conio.h>
    
    typedef struct
    {
      private:
        int     sum;    //struct では規定値は public
      public:
        int     v1;
        int     v2;
    }   TData;
    
    int main(void)
    {
        TData   *data = NULL;
        data = new TData;
        data->v1 = 30;
        data->v2 = 40;
        data->sum = data->v1 + data->v2;
        printf("data->v1= %d,  data->v2= %d,  data->sum= %d\n", data->v1, data->v2, data->sum);
        _getch();
        if (data)   delete data;
        return 0;
    }
    
  2. それでは private 領域はどこから参照されるのでしょうか。
    それは data 構造体で宣言されたメンバ関数からです。
    メンバ関数として add() と val_sum() が宣言されていますが、頭にスコープ演算子が付けられていることに注目して下さい。
    スコープ演算子の説明は scope 演算子 を参照して下さい。
    ここまで来ると Object Class と呼ぶ方が相応しいかも知れません。
    実は構造体と Object Class には本質的な違いは無く「struct と書くと構造体で、class と書くと Object Class」になります。
    /*★ struct → Class     前田 稔 ★*/
    #include <stdio.h>
    #include <conio.h>
    
    typedef struct
    {
      private:
        int     sum;    //struct では規定値は public
      public:
        int     v1;
        int     v2;
      public:
        void    add(void);
        int     val_sum(void);
    }   TData;
    
    void  TData::add(void)
    {   sum= v1+v2;
    };
    
    int  TData::val_sum(void)
    {   return(sum);
    };
    
    int main(void)
    {
        TData   *data = NULL;
        data = new TData;
        data->v1 = 30;
        data->v2 = 40;
        data->add();
        printf("data->v1= %d,  data->v2= %d,  data->sum= %d\n", data->v1, data->v2, data->val_sum());
        _getch();
        if (data)   delete data;
        return 0;
    }
    

超初心者のプログラム入門(C/C++)