这里写目录标题
- 1. 友元
- 1.2 友元函数
- 1.3 友元类
- 2. 内部类
- 3.匿名对象
1. 友元
之前实现日期类我们实现输入输出流重载的时候就已经了解了友元的概念,我们今天正式走进友元,详细地学习友元的各种特点与性质。
关键字:friend
1.2 友元函数
友元函数在重载operator<<与operator>>时已经进行过介绍与实际举例:因为我们要让变量流向cout/cin,因此在全局写函数,让该函数成为日期类的友元函数,该函数就能直接访问类的私有成员,在类的内部声明,声明时需要加friend关键字,此处不再详细赘述,直接给出友元函数的特点:
1.友元函数可以访问类的私有和保护成员,但不是类的成员函数;
2.友元函数不能用const修饰;
3.友元函数可以在类定义的任何地方声明,不受类访问限定符的限制;
4.一个函数可以是多个类的友元函数,
5.友元函数的调用与普通函数的调用原理相同。
1.3 友元类
友元类也很好理解:
友元类的特性:
1.友元关系是单向的;
2.友元关系不具有传递性(即A是B的友元,B是C的友元,不代表A是C的友元);
2. 内部类
如果一个类定义在另一个类的内部,这个内部定义的类就叫做内部类:
内部类不属于外部类,它是一个独立的类,只是他的访问受外部类的类域与访问限定符的限定,同时,内部类天生是外部类的友元函数,内部类能访问到外部类的成员变量。
下面的实验形象的证明了外部类并不包含内部类,他们是独立的个体。
内部类的特性:
1.内部类可以定义在外部类的public、protected、private。
2.内部类可以直接访问外部类的static成员,不需要外部类的对象/类名。
3.内部类在外部的访问受外部类的限定;
4.内部类是独立的一个类,其成员不属于外部类;
3.匿名对象
定义一个对象时,不给对象命名:
匿名对象的生命周期只在它所在这一行(即遇到分号;它的生命周期就结束了)
最后一点内容就是编译器对于传参与传返回值时会进行一些优化,提高程序运行效率,介于每种编译器的优化效果不同,这一部分同学们可以下去自己尝试看看自己的编译器怎么优化的?
至此,类与对象的内容全部结束,类与对象是学习C++的一道门槛,大家一定要好好重视这部分内容,我们下期再见!!!