C++学习:内部类的声明和定义

C++学习:内部类的声明和定义


简介:
内部类也就是内部的类,是包含在一个类里面的类
注意:
此时这个类不属于外部的类,不能通过外部类的对象直接调用内部类,外部的类对内部的类没有任何优越的访问权限


提示:

博主:章飞_906285288
博客地址:http://blog.csdn.net/qq_29924041


内部类的相关特性:

1:内部类可以定义在外部类的public,private,proteced中

a:定义在外部类的public访问限制符中的时候,可以通过外部类::内部类来创建对象

b:通过private,protected访问限制符的,不能够通过外部类::内部类的形式在外部创建对象

2: 注意内部类可以直接访问外部类中的static、枚举成员,不需要外部类的对象/类名,但是不能直接在内部类中直接访问外部类的非静态和枚举成员

因为静态成员和枚举成员是属于类不属于对象的,所以在类创建的时候,可以去直接访问

非静态成员和枚举成员是属于对象的,所以如果需要访问的话,这个时候需要创建对象

3:内部类的创建方式

通过外部类::内部类来创建内部类对象
OutClass::InnerClassOne innerClassOne;
或者:
OutClass::InnerClassOne* innerClassOnePointer = new OutClass::InnerClassOne();

4:内部类与外部类的大小关系(互相不影响)

内部类和外部类的大小关系是互相不影响的,因为内部类不属于外部类的成员变量,所以没有任何关系

简单的案例

/*
 * ===========================================================================
 *
 *       Filename:  innerclass.h
 *    Description:  
 *        Version:  1.0
 *        Created:  2017年07月02日 16时19分06秒
 *       Revision:  none
 *       Compiler:  gcc
 *         Author:   (), 
 *        Company:  
 *
 * ===========================================================================
 */

#ifndef __INNERCLASS_H__
#define __INNERCLASS_H__

#include<iostream>
using namespace::std;

class OutClass{
  public:
    OutClass(){
       cout<<"OutClass constructor"<<endl;
    }

    ~OutClass(){
      cout <<"OutClass destructor"<<endl;
    }
    //如果内部类定义在public中,则可以通过外部类::内部类来进行生成内部类对象
    class InnerClassOne{
      public:
        InnerClassOne(){
          cout<<"InnerClassOne constructor"<< endl;
        }
        ~InnerClassOne(){
          cout <<"InnerClassOne destructor"<<endl;
        }
        void setInnerClassOneMember(int innerClassOneMember){
            innerClassOneMember = innerClassOneMember;
        }
        //内部类可以直接去访问外部类的静态成员,枚举变量,而不需要去使用外部类对象名,静态成员属于类,不属于对象
        void showOutClassMember(){
          cout<<"static member:"<< static_member << endl;
          //注意:内部类不能够直接访问外部类的非静态成员,因为这是需要外部类对象的
          //cout << "member:" <<member<endl;
        }
      private:
        int innerClassOneMember;
      protected:

    };

    //内部类可以在外部类中先去声明,然后去外部实现
    //
    class InnerClassFour;
  private:
    int member;
    static int static_member;

    //如果定义在private中,那么这个内部类只能在外部类本类中进行使用,在外部不能够定义内部类的对象
    class InnerClassTwo{
      public:
        InnerClassTwo(){
          cout <<"InnerClassTwo constructor" <<endl;
        }
        ~InnerClassTwo(){
          cout<<"InnerClassTwo destructor"<<endl;
        }
      private:
    };

  protected:
    //定义在proteced中的内部类,也是不可以在外部定义的
    class InnerClassThree{
      public:
        InnerClassThree(){
          cout<<"InnerClassThree constructor" << endl;
        }
        ~InnerClassThree(){
          cout<<"InnerClassThree destructor" << endl;
        }
      private:
    };
};

int OutClass::static_member = 0;

//声明的内部类的实现
class OutClass::InnerClassFour{
  public:
     void showStaticMember(){
       cout <<"static_member:"<< static_member << endl;
     }
};

#endif
/*
 * ===========================================================================
 *
 *       Filename:  innerclassTest.cpp
 *    Description:  
 *        Version:  1.0
 *        Created:  2017年07月02日 16时50分39秒
 *       Revision:  none
 *       Compiler:  gcc
 *         Author:   (), 
 *        Company:  
 *
 * ===========================================================================
 */

#include<iostream>
#include"innerclass.h"



int main(){
  //创建一个外部类
  OutClass outclass;
  //创建一个内部类InnerClassOne
  OutClass::InnerClassOne innerclassOne;
  innerclassOne.setInnerClassOneMember(5);
  innerclassOne.showOutClassMember();

  //创建内部类InnerClassFour
  OutClass::InnerClassFour innerclassFour;
  innerclassFour.showStaticMember();

  //创建内部类InnerClassThree
  //OutClass::InnerClassThree innerclassthree;

  //输出OutClass的大小
  cout<<"sizeof OutClass:"<<sizeof(OutClass)<<endl;
  //输出InnerClass的大小
  cout<<"sizeof InnerClassOne:"<<sizeof(OutClass::InnerClassOne)<<endl;


  return 0;
}

输出的结果为;

OutClass constructor
InnerClassOne constructor
static member:0
static_member:0
sizeof OutClass:4
sizeof InnerClassOne4
InnerClassOne destructor
OutClass destructor
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值