一文弄懂C++的内部类

简介: 内部类概念如果一个类定义在另一个类的内部,这个内部的类,叫做内部类。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。

内部类概念

如果一个类定义在另一个类的内部,这个内部的类,叫做内部类。

内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。

内部类特性

  • 内部类是外部类的友元类,但是外部类不是内部类的友元。(即内部类可以访问外部类)。
  • 内部类定义在外部类的public、protected、private()都是可以的;但是内部类受这些限制符的限定。
  • 注意内部类可以直接访问外部类种的static成员,不需要外部类的对象/类名。
class A
{
  class B    // 内部类
  {
  public:
    void Print()
    {
      A t1;
      cout << static_a << endl;  // 内部类访问静态成员,可以突破类域进行访问
      cout << A::_a << endl;   //  报错
      cout << t1._a << endl;   //而普通成员只能通过对象进行访问
    }
  };
private:    //定义在A类下的成员变量
  int _a;
  static int static_a;
};
  • 在类外定义内部类,受外部类的限制。
int main()
{
  A::B t2;
  t2.Print();
  return 0;
}
  • sizeof(外部类) = 外部类,和内部类无关。(不算静态成员)
int main()
{
  cout << sizeof(A) << endl;  // 4字节
  //注意静态成员不计入里面。
  return 0;
}

目录
相关文章
|
3月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
156 5
|
4月前
|
存储 设计模式 编译器
【C++篇】C++类与对象深度解析(五):友元机制、内部类与匿名对象的高级应用
【C++篇】C++类与对象深度解析(五):友元机制、内部类与匿名对象的高级应用
59 2
|
7月前
|
编译器 C++
【C++】类和对象⑤(static成员 | 友元 | 内部类 | 匿名对象)
📚 C++ 知识点概览:探索类的`static`成员、友元及应用🔍。
|
9月前
|
Java 编译器 C语言
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象(下)
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象
50 0
|
9月前
|
C语言 C++
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象(中)
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象
70 0
|
9月前
|
编译器 C语言 C++
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象(上)
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象
79 1
|
9月前
|
编译器 C++
【C++】类与对象(static、explicit、友元、隐式类型转换、内部类、匿名对象)
【C++】类与对象(static、explicit、友元、隐式类型转换、内部类、匿名对象)
58 2
|
9月前
|
存储 Java C++
【C++类和对象】探索static成员、友元以及内部类
【C++类和对象】探索static成员、友元以及内部类
|
9月前
|
编译器 C++
【c++】内部类和匿名对象
【c++】内部类和匿名对象
|
9月前
|
C++
C++——类和对象(初始化列表、匿名对象、static成员、类的隐式类型转换和explicit关键字、内部类)
C++——类和对象(初始化列表、匿名对象、static成员、类的隐式类型转换和explicit关键字、内部类)