C++拾遗(十三)友元和嵌套类
友元类
使用友元的场合:
1、两个类既不是is-a关系也不是has-a关系,但是两个类之间又需要有联系,且一个类能访问另一个类的私有成员和保护成员。
2、一个类需要用到另外多个类的私有成员。
C++primer一书中给出的例子:电视和遥控器。
class Tv //原始类 电视
{
public:
friend class Remote;//友元类声明
//..
}; class Remote //友元类 遥控器
{
//
};
友元声明可以位于原始类的任何位置(public,private,protect中都行)。
同时在使用友元时,常用到前向声明。
嵌套类
在另一个类中声明的类被称为嵌套类。
嵌套类的构造函数可以在函数声明中定义,也可以在实现文件中用两个类作用域解析符来完成。
嵌套类、枚举和结构的作用域:
| 声明位置 | 包含它的类是否可以使用它 | 从包含它的类派生出来的类是否可以使用它 | 外部世界是否可以使用它 | 
| 私有 | 是 | 否 | 否 | 
| 保护 | 是 | 是 | 否 | 
| 公有 | 是 | 是 | 是(通过类限定符来使用) | 
另外,对嵌套类访问控制规则和常规类一样。这意味着即使是包含嵌套类的类也不能使用嵌套类的私有和保护成员。
C++拾遗(十三)友元和嵌套类的更多相关文章
- mfc 嵌套类
		嵌套类 一. 嵌套类 嵌套类的定义 将某个类的定义放在另一个类的内部,这样的类定义,叫嵌套类. class AAA { int aaa; class BBB { int bbb; //其它成员或者函数 ... 
- 【转】C++之内部类(嵌套类)与外部类及友元
		[转]http://baike.baidu.com/link?url=Md223wQoT5s-3cZ5xRnj1pGmvm310DKAuh-HDrcEdc2l24rwobHrdEc_Mi4Z3BGP0 ... 
- 【C++】嵌套类、友元
		黄邦勇帅 里面关于嵌套类的介绍我有疑惑.里面11.9说在创建一个外围类的对象时先执行嵌套类的构造函数然后再执行外围类的构造函数,析构函数则以相反的方式执行. 可是我编程实验了一下,创建外围类对象时并不 ... 
- C++ 嵌套类使用(三)
		如果嵌套类型和其外部类型之间的关系需要成员可访问性语义,需要使用C++嵌套类,嵌套类型不应针对其声明类型以外的类型执行任务,而C++局部类允许类.结构和接口被分成多个小块儿并存储在不同的源文件中,这样 ... 
- C++ 嵌套类使用(二)
		C++嵌套类 1. 嵌套类的名字只在外围类可见. 2. 类的私有成员只有类的成员和友元可以访问,因此外围类不可以访问嵌套类的私有成员.嵌套类可以访问外围类的成员(通过对象.指针或者引用). 3 ... 
- C++ 嵌套类使用(一)
		一.嵌套类 在一个类的内部定义另一个类,我们称之为嵌套类(nested class),或者嵌套类型.之所以引入这样一个嵌套类,往往是因为外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的 ... 
- C++学习笔记(十二):类继承、虚函数、纯虚函数、抽象类和嵌套类
		类继承 在C++类继承中,一个派生类可以从一个基类派生,也可以从多个基类派生. 从一个基类派生的继承称为单继承:从多个基类派生的继承称为多继承. //单继承的定义 class B:public A { ... 
- C++学习之嵌套类和局部类
		C++学习之嵌套类和局部类 局部类 在一个函数体内定义的类称为局部类. 局部类中只能使用它的外围作用域中的对象和函数进行联系,因为外围作用域中的变量与该局部类的对象无关.在定义局部类时需要注意:局部类 ... 
- c++中嵌套类,外部类访问内部类的私有成员变量
		在嵌套类中,内部类可以直接访问外部类的私有成员变量,但是外部类不能直接访问内部类的私有成员变量,必须把外部类声明为内部类的友元类 /********************************** ... 
随机推荐
- BAT带队烧钱圈地华为们猛追云计算
			在和一位创业者交流时,他说现在创业者想从市场脱颖而出太难了,且不论创业本身的不易,更多时候是想做的事情都被BAT广撒网覆盖了. 现实也正是如此,包括影业.在线音乐.车联网等领域,BAT都已涉足.如今, ... 
- sql server 的ANSI_NULLS设置
			当 SET ANSI_NULLS 为 ON 时,表示SQL语句遵循SQL-92标准.当 SET ANSI_NULLS 为 OFF 时,表示不遵从 SQL-92 标准. SQL-92 标准要求对空值(N ... 
- Silverlight闹钟
			一:截图 二:XAML代码 <UserControl x:Class="SilverlightClock.MainPage" xmlns="http://schem ... 
- 详解C语言的main函数
			如图所示:#include<stdio.h>这是一个头文件,包含的是C程序运行的C语言的库函数,只有包含了相关的头文件,在程序中才能调用.stdio表示输入输出控制.printf():就是 ... 
- hdu4746:2013杭州网络赛I 莫比乌斯反演
			题意: 有5000组询问,每组询问求有多少i,j满足i∈[1,n],j∈[1,m]且gcd(i,j)的质因子数目<=p. n,m<=500000 思路: 首先预处理出每个数的质因子数目分别 ... 
- 解决Xcode7    iOS9苹果将原http协议改成了https协议问题
			在info.plist 加入key <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbi ... 
- 转:ORM框架
			转自 程序员成长之路:http://blog.csdn.net/zxc22436/article/details/6875220 对象关系映射(ORM)提供了概念性的.易于理解的模型化数据的方法.OR ... 
- Sql 行转列、列转行及分页
			说明:本实例是以 SQL Server 2005 为运行环境的. 准备工作:创建一个名为 DB 的数据库(CREATE DATABASE DB). 一.T-SQL 行转列 1.创建如下表 CREATE ... 
- max key length is 1000 bytes
			ALTER TABLE ad_keyword_brand ADD CONSTRAINT w1 UNIQUE (keyword,adasin,brand,page_position,country,ad ... 
- javascript动态改变当前页面中元素的状态行为
			function Datea() { var timed = document.getElementById('timed'); var t = setInterval(function TDate( ... 
