目录
再谈构造函数
构造函数体赋值
在类中定义的构造函数,它仅仅是给成员赋值,而没有去完成成员的初始化。而有些成员是要有初值的,比如,引用类型,被const修饰的类型自定义类型(且改类没有默认的构造函数);类中给的构造函数已经不能满足我们的需求了。
初始化列表
以一个
冒号开始
,接着是一个以
逗号分隔的数据成员列表
,每个
"
成员变量
"
后面跟一个
放在括
号中的初始值或表达式。
【注意】
1.
每个成员变量在初始化列表中
只能出现一次
(
初始化只能初始化一次
)
2.
类中包含以下成员,必须放在初始化列表位置进行初始化: 引用成员变量 ,const成员变量 ,自定义类型成员(
且该类没有默认构造函数时)。
3.
尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化。
4.
成员变量
在类中
声明次序
就是其在初始化列表中的
初始化顺序
,与其在初始化列表中的先后次序无关。

就算没有用缺省参数或者调用有参构造函数,也就完成了对a,b,c,的初始化。
缺省参数也算给成员初始话。
explicit关键字
构造函数不仅可以构造与初始化对象,
对于接收单个参数的构造函数,还具有类型转换的作用
。接收单个参
数的构造函数具体表现:
1.
构造函数只有一个参数
2.
构造函数有多个参数,除第一个参数没有默认值外,其余参数都有默认值
3.
全缺省构造函数
static成员
我们想使用类中函数或者成员的时候,都需要去创建一个对象在去调用类中函数或者成员,但如果函数或者成员是private修饰的话就算创建对象也没有用,.
概念
声明为
static
的类成员
称为
类的静态成员
,用
static
修饰的
成员变量
,称之为
静态成员变量
;用
static
修饰
的
成员函数
,称之为
静态成员函数
。
静态成员变量一定要在类外进行初始化
特性
1.
静态成员
为
所有类对象所共享
,不属于某个具体的对象,存放在静态区
2.
静态成员变量
必须在
类外定义
,定义时不添加
static
关键字,类中只是声明
3.
类静态成员即可用
类名
::
静态成员
或者
对象
.
静态成员
来访问
4.
静态成员函数
没有
隐藏的
this
指针
,不能访问任何非静态成员
5.
静态成员也是类的成员,受
public
、
protected
、
private
访问限定符的限制

友元
友元提供了一种突破封装的方式,有时提供了便利。但是友元会增加耦合度,破坏了封装,所以友元不宜多
用。
友元分为:
友元函数
和
友元类
友元函数
在c++类与对象(篇2)中我们说到了operator<<的重载,用到了友元函数,
说明
友元函数
可访问类的私有和保护成员,但
不是类的成员函数
友元函数
不能用
const
修饰
友元函数
可以在类定义的任何地方声明,
不受类访问限定符限制
一个函数可以是多个类的友元函数
友元函数的调用与普通函数的调用原理相同
友元类
友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。
友元关系是单向的,不具有交换性。
友元关系不能传递 。
友元关系不能继承。
内部类
概念:
如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。外部类对内部类没有任何优越的访问权限。
注意:
内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访问外部类中的所有成员。但是外部类不是内部类的友元。
特性:
1. 内部类可以定义在外部类的
public
、
protected
、
private
都是可以的。
2. 注意内部类可以直接访问外部类中的
static
成员,不需要外部类的对象
/
类名。
3. sizeof(外部类
)=
外部类,和内部类没有任何关系。
