类的组合:对象充当成员
在创建对象时,也要对内嵌对象初始化
组合类构造函数定义
类名::类名(形参):内嵌对象1(形参),内嵌对象2(形参)
{ }
Circle:: Circle(float r)
{radius=r;}
等价于Circle:: Circle(float r):radius(r) {}//效率更高
此时构造函数调用顺序:1、调用内嵌对象的构造函数,按定义中出现的次序2、自己的
组合类的拷贝构造函数,要为内嵌对象的拷贝构造函数传递参数,若C类中包含B类的对象b,则C类的拷贝构造函数形式为
C::C(C &c1):b(c1.b) {…}
全局变量和加static声明的,都具有静态生存期
类的静态成员:所有对象共享
1、 静态数据成员:不是某个对象的成员,而是为整个类所有,只存储在一个地方
只能通过类名访问“类型 类名::标识符”
//静态数据成员的定义和初始化,在类外使用类名限定
2、 静态函数成员
作用:专门访问静态数据成员,访问其它数据成员必须通过参数传递得一对象,再通过该对象访问其它数据成员
3、 一般的函数成员只能通过对象调用,但静态函数成员可以用对象或者类名来调用,从而可以在没有定义对象之前便可以调用函数
若通过一般的函数成员访问静态数据成员,最好在类外实现
类的友元:声明哪些类或函数是它的朋友,从而给它们提供对本类的访问特许
1、 友元函数:可以是一个普通函数,也可以是其它类的成员函数,
从而可以在友元函数中通过对象访问其它类的数据。
2、 友元类
Class B
{ friend class A;//声明A为B的友元类}
A的所有成员函数都是B的友元函数,都可以访问B的数据,这时最好将B的对象作为A的数据成员(类的组合),以便通过该对象访问B的数据。