9.1利用构造函数对类对象进行初始化 p246
- 构造函数(其名字必须与类名一样) 建立类对象时自动调用构造函数(没有类型,没有返回值)
- 类内或者类外都可以
- 带参数的构造函数 BOX box1(12,23,45);//建立对象时可以向构造函数传参数
- 参数初始化表,p250
- 构造函数的重载(一个类中可以定义多个构造函数)
- 构造函数中采用默认参数:相当于好几个重载的构造函数
9.2 析构函数
- 析构函数:不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作。不能被重载,一个类中只能有一个。~
- 析构函数使用的四种情况:
9.3 调用构造函数和析构函数的顺序
- 先构造的后析构,后构造的先析构
9.4 对象数组
*
9.4 对象指针p261
- 指向对象的指针 (*pt).hour pt->hour
- 指向对象成员的指针(数据、成员函数)
- this指针 指向本类对象的指针;其值是当前调用函数所在对象的起始地址。
9.6 共用数据的保护
- 常对象const 在该对象的生命周期里面,t1中所有对象成员的值都不能被修改
- 常成员函数是常对象唯一的对外接口,未被声明为常成员函数的函数不能在类外被调用
- 常数据成员 只能用带参数初始化表的构造函数对其进行初始化,不能赋值
- 常成员函数 const在最后面
- 常对象中,只保证其数据成员都是常数据成员,其值不被修改。其中的成员函数若未加const声明,默认为非const成员函数处理
- 指向对象的常指针:Time const ptrl *常后 常作为函数形参,不允许函数执行过程中改变指针变量的值
- 指向常对象的指针:const char *p
- 当希望调用函数时对象的值不被修改,就应该把形参定义为指向常对象的指针,同时用对象的地址作实参,对象可以是const型或者非const型
- 如果要求对象在整个的程序执行过程中其值也不能改变,则应该把它改为const型。
- 对象的常引用
- 用常指针和常引用作函数参数,可以提高函数运行效率。而直接用对象名作形参和实参,会建立实参的拷贝,调用复制构造函数,有额外的时间开销。
- 对象的动态建立与释放 new(用new建立的动态对象一般不用对象名了,通过指针访问) delete
9.8 对象的赋值与复制
- 赋值:仅对数据成员赋值 =(重载)
- 复制:Box box2(box1) 复制构造函数
9.9 静态成员 p279
- 静态数据成员
- 多个对象之间实现数据共享:少用全局变量(破坏了封装的原则,不符合面对对象程序的要求),使用静态的数据成员
- static 在类中只要指定了静态数据成员,即使不定义对象,也会给static 提前分配空间(它是属于类的)
- 静态数据成员可以初始化,但只能在类体外初始化。不能用参数初始化表对静态成员进行初始化。
- 在类外可以用对象名引用静态数据成员,也可以用类名引用之(::域运算符)
- 静态成员函数(无this指针,不能访问本类中的非静态成员):为了处理静态数据成员
- 公用的成员函数可以引用本对象的非静态数据成员,也可以引用静态数据成员
- 好习惯:静态成员函数只用来引用静态数据成员
9.10 友元friend
*