从C开始的CPP学习生活05-内部类

1、定义

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

内部类虽然定义在外部类中,但并不属于外部类,外部类对内部类没有任何优越的访问权限;

内部类相当于外部类的友元类+内部类可以直接访问外部类中的static、枚举成员

注意:友元类的定义是内部类可以通过外部类的对象来访问外部类的所有成员

2、使用

所以观察以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class OUT
{
public:
int a;
OUT() : a(12) {};

public:
class IN {
public:
int b;
IN() : b(13) {}
void funIN()
{
std::cout << a << std::endl; //ERROR
}
};
};

我们用OUT表示外部类,IN 表示内部类,此时内部类的funIN函数想要访问外部类的成员a,显然是错误的

此时要么将a定义成static类型,要么采用下面的方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class OUT
{
public:
int a;
OUT() : a(12) {};

public:
class IN {
public:
int b;
IN() : b(13) {}
void funIN()
{
OUT out1;
std::cout << out1.a << std::endl;
}
};
};

3、注意事项

  • 由于内部类不属于外部类,所以sizeof(外部类)=外部类的大小
  • 内部类定义在外部类的public,protected和private中都可以
  • 可以通过 外部类::内部类的方法定义内部类的对象
1
2
OUT::IN in;
in.funIN();

从C开始的CPP学习生活05-内部类
http://example.com/2022/10/26/cppnote05/
作者
Anhongzhan
发布于
2022年10月26日
许可协议