C++の内部クラス

6501 ワード

コンテンツの概要
  • 内部クラスは何ですか
  • 内部クラスの役割
  • コード例
  • とjava内部クラスの対比
  • 内部クラスとは
    内部クラスはC++のネストされたクラスです.クラス宣言で定義されたローカルデータ型です
    内部クラスの役割
    内部クラスは外部クラスで定義されていますが、両者は関係なく、個人的に内部クラスの役割はコードの組織と管理のために多く感じられます.
  • 内部クラスは、対応するpublicまたはprivateプロパティに基づいて、外部で変数を定義できるかどうかを制御します.
  • 外部クラスのメンバー変数がタイプ名、静的または列挙数でない場合、内部クラスは直接メンバー変数を使用できません.
  • は、内部クラスと外部クラスをより一般的に実現するために、メンバーポインタを追加し、メタ関数を宣言することによってprivateデータにアクセスすることもできる.

  • コードの例
    /* * 1.                、                      
     * 2.                      
     *
     */
    
    template<typename T>
    class Outer{
         
        public:
            Outer(){
         cout<<"address of Outer: "<<this<<endl;}
            class Inner{
         
    
                public:
                    Inner(){
         cout<<"address of Inner: " <<this<<endl;}
                    T set_val_Outer(T val)
                    {
         
                        Outer<T>* Outer_addr = (Outer<T>*)((char*)this-offsetof(Outer<T>, in));//offsetof   cstddef 
                        Outer_addr->val_Outer = val;
                        return Outer_addr->val_Outer;
    
                    }
                    T val_Inner;
            } in;//                 ,            ,            ,     in       >      。
            T val_Outer;
    };
    
    int main()
    {
         
        Outer<int> outer;
        Outer<int>::Inner inner;
        outer.val_Outer=3;
    
        inner.val_Inner=4;
    
        cout<<outer.val_Outer<<","<<inner.val_Inner<<endl;
    
        outer.in.set_val_Outer(12);
        cout<<"Outer val after reset:"<<outer.val_Outer<<endl;
        return 0;
    }
                  
    

    Java内部クラスとの比較
    后でjavaを学んで更に补います!!!