1.内部类的概念

如果一个类定义在另一个类的内部,这个内部类就叫做内部类。注意此时这个内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去调用内部类。外部类对内部类没有任何优越的访问权限。

也就是说:内部类相当于外部类的友元类。注意友元类的定义,内部类中的方法可以通过外部类的对象参数来访问外部类中的所有成员(包括private)。但是外部类不是内部类的友元。

2.内部类可以定义在外部类的public、protected、private都是可以的。

如果内部类定义在public,则可通过 外部类名::内部类名 来定义内部类的对象。
如果定义在private,则外部不可定义内部类的对象,这可实现“实现一个不能被继承的类”问题。

#include <iostream>
using namespace std;
class A {
private:
static int i;
class B {}; // 这里B是private的,在A类外就不能使用A::B来定义内部类的对象。
};
int main(int argc, char* argv[])
{
A::B *b = new A::B();
return ;
}

3.内部类可以直接访问外部类中的任何权限的static成员、枚举成员,不需要通过外部类的对象或类名来访问。

#include <iostream>
using namespace std;
class A
{
private:
static int k;
int h; public:
class B{
void foo(){
cout << k <<endl; //ok
//cout << h << endl; //error,只有外部类对象存在时h才是存在的。 若foo的参数是A a,则可通过a.h访问
}
};
};
int A::k=; int main() {
return ;
}

这和友元类的使用也是同样的道理。“想要使用另一个类的非static成员,必须要存在这个类的对象”。

4.在堆中创建内部类对象

class A {
public:
class B{};
}; int main(int argc, char* argv[])
{
A::B *b = new A::B();
return ;
}

5.内部类可以现在外部类中声明,然后在外部类外定义

#include <iostream>
using namespace std;
class A {
private:
static int i;
public:
class B; //只是声明
};
class A::B { //定义A的内部类B
public:
void foo() {
cout << i << endl;
}
};
int main(int argc, char* argv[])
{
A::B *b = new A::B();
return ;
}

6.sizeof(外部类)=仅仅是外部类的大小,和内部类没有任何关系。内部类的大小也和外部类没有关系

#include <iostream>
using namespace std;
class A {
int a;
public:
class B {
int b;
int c;
};
};
int main(int argc, char* argv[])
{
cout << sizeof(A) << endl; //
cout << sizeof(A::B) << endl; // return ;
}

总结:

1.内部类相对于普通类来说,主要是能直接访问外部类的私有成员。

C++中的内部类的更多相关文章

  1. Java中的内部类(成员内部类、静态内部类、局部内部类、匿名内部类)

    Java中的内部类(成员内部类.静态内部类.局部内部类.匿名内部类) 神话丿小王子的博客主页 我们先看这样一段话:人是由大脑.肢体.器官等身体结果组成.而组成我们人体的心脏它也有自己的属性和行为(血液 ...

  2. Scala的类中定义内部类实战

    scala独特之处在于可以在类中定义内部类,起到对外屏蔽作用. 类中默认都是public权限.后面将讲解如何引入接口,scala中的接口与java点区别.特质/接口(Trait)

  3. 【java基础】内部类,局部内部类,匿名内部类、静态内部类、接口中的内部类

    内部类: 1.定义在一个类中的内部类,内部类的实例化伴随着外围类所定义的方法来构造,内部类对象有外围类的隐式引用,所以内部类可以直接访问外围类的外围类的域,包括私有的,这是内部类的访问特权,所以比常规 ...

  4. (转载)在spring的bean中注入内部类

    原文链接:http://outofmemory.cn/java/spring/spring-DI-inner-class 在spring中注入内部类,有可能会遇到如下异常信息: 2014-5-14 2 ...

  5. java中的内部类概念

    内部类和外部类可以互相访问私有属性 1.普通内部类实例化方式 外部类.内部类 对象 = new 外部类().new 内部类(); class Outer{//外部类 private String ms ...

  6. Java 中的内部类

    前言 在第一次把Java 编程思想中的内部类这一章撸完后,有点印象.大概知道了什么时内部类,局部内部类,匿名内部类,嵌套内部类.随着时间的推移,自己慢慢的就忘记了,总感觉自己思考的东西不多,于是 看了 ...

  7. Java中的 内部类(吐血总结)

    1. 内部类的作用 内部类是一个独立的实体,可以用来实现闭包:能与外部类通信:内部类与接口使得多继承更完整 2. 内部类的分类 1)普通内部类 类的实例相关,可以看成是一个实例变量.内部类的类名由 “ ...

  8. Java中的内部类————以及jdk1.8的lambda表达式

    一.内部类学习导图 1>.静态内部类: 使用static修饰符来修饰内部类,则这个内部类就属于外部类本身,而不属于外部类的某个对象.因此使用static修饰的内部类被称为静态内部类. publi ...

  9. 【转】Java中的内部类和匿名类

       Java内部类(Inner Class),类似的概念在C++里也有,那就是嵌套类(Nested Class),乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的 ...

随机推荐

  1. Delphi10.2 关于Http 下载

    演示如图: 代码如下: unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Vari ...

  2. Java继承2

    1.为什么使用继承 从已有的类派生出新的类,称为继承. 在不同的类中也可能会有共同的特征和动作,可以把这些共同的特征和动作放在一个类中,让其它类共享. 因此可以定义一个通用类,然后将其扩展为其它多个特 ...

  3. java多线程中的调度策略

    两种线程的调度模式: 抢占式调度: 抢占式调度指的是每条线程执行的时间.线程的切换都由系统控制,系统控制指的是在系统某种运行机制下,可能每条线程都分同样的执行时间片,也可能是某些线程执行的时间片较长, ...

  4. bootstrap-fileinput视频上传

    在页面编写一个input框: <input id="input-repl-3a" name="videoFileAddress" type="f ...

  5. linux install ftp server

    first  yum install vsftpd 第二部:vi /etc/vsftpd/vsftpd.conf 添上下面一段话 anonymous_enable=YESlocal_enable=YE ...

  6. node.js 之 N-blog

    N-blog  使用 Express + MongoDB 搭建多人博客 原文地址: https://github.com/nswbmw/N-blog 建议初学者,研究下整个项目. 这里节选了一些内容为 ...

  7. 使用Pillow库 创建简单验证码

    使用Pillow生成简单的验证码 本想做成字体各自按随机角度倾斜, 但没有在Pillow中找到相关的方法 import randomfrom PIL import Image, ImageDraw, ...

  8. ARM内核单片机Bootloader中断向量重定位问题

    Bootloader中断向量重定位问题 1.Bootloader程序在内核Cortex-M0+内核中运行时需要进行地址跳转执行应用程序主程序,此时就涉及到了中断向量重定位问题,以下截图为单片机启动文件 ...

  9. db.properties是干什么用的

    连接池配置文件db.properties是java中采用数据库连接池技术完成应用对数据库的操作的配置文件信息的文件.具体配置项目如下:drivers=com.microsoft.sqlserver.j ...

  10. java面向对象编程(八)--抽象类、接口

    1.抽象类 1.1抽象类概念 当父类的一些方法不能确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]. //抽象类的必要性[Demo124.java] ...