C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计
基本知识 a C++语言程序设计
9.2 常对象和常成员 常对象 定义对象时用const进行修饰,称为常对象 声明的语法形式:类名 const 对象名 常对象的数据成员值在对象的整个生存期间内不能被改变 常对象在定义时必须进行初始化且不能被更新 C++语法规定:常对象只能调用常成员函数,以保证常对象的数据成员不被修改 例如: class Point { public: Point(int i,int j){x=i;y=j;} //… private: int x,y; }; //a是常对象,不能被更新 Point const a(3,4); C++语言程序设计
9.2 常对象和常成员 常成员函数 常成员函数具有以下特点: 类成员函数使用const关键字修饰,称为常成员函数 const是函数类型的一个组成部分,在函数实现时也要带const关键字 常成员函数不能更新对象的数据成员,也不能调用该类中的非常成员函数 常对象只能调用常成员函数,但是常成员函数可以被普通对象调用 const关键字可被用于参与对重载函数的区分 例如:在类中这样声明是对print函数的有效重载 void print(); void print() const; C++语言程序设计
9.2 常对象和常成员 例:常成员函数和常对象示例 C++语言程序设计 //常成员函数和常对象示例 #include <iostream> using namespace std; class R { public: R(int r1, int r2){R1=r1;R2=r2;} void change(int, int); void print() const; private: int R1,R2; }; void R::change(int a, int b){ R1=a; R2=b; } void R::print() const{ cout<<R1<<";"<<R2<<endl; void main(){ R a(5,4); a.print(); //也调用void print() const const R b(20,52); b.print(); //调用void print() const C++语言程序设计
9.2 常对象和常成员 常数据成员 使用const说明的数据成员称为常数据成员 常数据成员一经初始化就不能再被改变 提示:其实对于对象而言,实例数据成员为常量几乎没有意义,所以通常把常数据成员定义为静态数据,使其成为类的一个常量 常数据成员 使用const说明的数据成员称为常数据成员 常数据成员一经初始化就不能再被改变 构造函数对常数据成员进行初始化,只能通过初始化列表 初始化列表 在构造函数的函数头后面,用“:”连接的一组参数表 类名::类名(参数表) : 初始化列表 { //函数体 } 初始化列表的形式为:成员名1(初始值), 成员名2(初始值), … C++语言程序设计
9.2 常对象和常成员 例:常数据成员使用示例 C++语言程序设计 //常数据成员示例 //静态常数据成员在类外说明和初始化 #include <iostream> using namespace std; class Circle { public: Circle(int r, int i); void print(); private: int radius; const int a; //静态常数据成员 static const float PI; }; //静态常数据成员在类外说明和初始化 const float Circle::PI = 3.14159; //常数据成员只能通过初始化列表来获得初值 Circle::Circle(int r, int i):a(i),radius(r) {/*因为a是常数据成员,不能把语句a=i;写在构造函数体内*/ }//普通成员也可以在初始化列表中赋值 void Circle::print() { cout<<"a="<<a <<" radius="<<radius<<", area=" <<radius*radius*PI<<endl; } C++语言程序设计
9.2 常对象和常成员 例:常数据成员使用示例 C++语言程序设计 void main() /*建立对象x,并以100和0作为初值调用构造函数, 通过构造函数的初始化列表给对象的常数据成员赋初值*/ { Circle x(100,0); x.print(); } C++语言程序设计