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
    *