10.2 const(Constant)Objects and const Member Functions °建议: °所有不更改obje成员的函数均声明为cons成员函数 注意: (第20行)成员函数是否为常成员函数,不仅取决于 它不修改对象、不调用non- const成员函数,而且必须 显式地声明为 const! 构造函数、析构函数不能声明为 const °可以调用非 const成员函数初始化 const对象(为什么?) ●对象的常量特性体现在初始化(构造)后、析构之前 O 2015, SEU. All rights reserved. 11
© 2009, SEU. All rights reserved. © 2015, SEU. All rights reserved. 11 10.2 const (Constant) Objects and const Member Functions 建议: 所有不更改object成员的函数均声明为const成员函数 注意: (第20行)成员函数是否为常成员函数,不仅取决于 它不修改对象、不调用non-const成员函数,而且必须 显式地声明为const! 构造函数、析构函数不能声明为const 可以调用非const成员函数初始化const对象(为什么?) 对象的常量特性体现在初始化(构造)后、析构之前
10.2 const( Constant)Objects and const Member Functions °复习 const变量的操作 定义 const型常量 o const int a 100 ●注意:一定要在定义时对其初始化,不能赋值 同 define的区别(从编译器角度&从存储方式角度) const型指针 o const int *Point. /指向数据是常量 o int const point s &x. /指针本身是常量 ° const int *const Point=&y;/两者兼备 思考:对于 const数据成员的初始化 O 2015, SEU. All rights reserved. 12
© 2009, SEU. All rights reserved. © 2015, SEU. All rights reserved. 12 10.2 const (Constant) Objects and const Member Functions 复习const变量的操作 定义const型常量 const int a = 100; 注意:一定要在定义时对其初始化,不能赋值 同define的区别(从编译器角度&从存储方式角度) const型指针 const int *Point; int * const Point = &x; const int *const Point = &y; 思考:对于const数据成员的初始化 //指向数据是常量 //指针本身是常量 //两者兼备
总结: const作用 °可以定义 const常量,具有不可变性; 便于进行类型检查,使编译器对处理内容有更多了解,消 除了一些隐患; 可以避免意义模糊的数字出现,同样可以很方便地进行参 数的调整和修改; 可以保护被修饰的东西,防止意外的修改,增强程序的健 壮性; 提高了效率(编译器对常量进行优化) O 2015, SEU. All rights reserved. 13
© 2009, SEU. All rights reserved. © 2015, SEU. All rights reserved. 13 总结:const作用 可以定义const常量,具有不可变性; 便于进行类型检查,使编译器对处理内容有更多了解,消 除了一些隐患; 可以避免意义模糊的数字出现,同样可以很方便地进行参 数的调整和修改; 可以保护被修饰的东西,防止意外的修改,增强程序的健 壮性; 提高了效率(编译器对常量进行优化)
Const数据成员初始化的问题 数据成员在类定义体内只能定义不能初始化,初 始化过程需要在构造函数中进行 Const变量需要在定义时初始化 °无法对 const变量进行赋值 问题:如何进行 const数据成员的初始化? O 2015, SEU. All rights reserved. 14
© 2009, SEU. All rights reserved. © 2015, SEU. All rights reserved. 14 Const数据成员初始化的问题 数据成员在类定义体内只能定义不能初始化,初 始化过程需要在构造函数中进行 Const变量需要在定义时初始化 无法对const变量进行赋值 问题:如何进行const数据成员的初始化?
10.2 const(Constant)Objects and const member functions_初始化列表 Member Initializer constructor initializer ist(构造函数初始化列表) °所有的类成员都可以用构造函数初始化列表进行 初始化,而以下情况只能如此: const data member(例外? const static integer) o reference data member引用类型的数据成员 member objects,数据成员是其他类(未提供缺省构造 函数的对象* 继承类的基类 base class* 2015, SEU. All rights reserved. 15
© 2009, SEU. All rights reserved. © 2015, SEU. All rights reserved. 15 10.2 const (Constant) Objects and const Member Functions—初始化列表 Member Initializer – constructor initializer list(构造函数初始化列表) 所有的类成员都可以用构造函数初始化列表进行 初始化,而以下情况只能如此: const data member (例外?const static integer) reference data member 引用类型的数据成员 member objects, 数据成员是其他类(未提供缺省构造 函数)的对象* 继承类的基类base class*