第十章 类和对象 2、指向对象成员函数的指针 定义指向公用成员函数的指针变量的一般形式为: 数据类型名 (类名∷*指针变量名)(参数表列); 使指针变量指向一个公用成员函数的一般形式为: 指针变量名=类名∷成员函数名; 例:void (Time∷*p2)( ); p2=Time∷get_time; 例9.7 对象指针举例 3、this 指针 每个对象中的数据成员都分别占有存储空间,如果对同一个类定义了n个对象,则有n组同样大小的空间以存放n个对象中的数据成员。但是,不同对象都调用同一个函数代码段。 那么,当不同对象的成员函数引用数据成员时,怎么能保证引用的是所指定的对象的数据成员呢? 在每一个成员函数中都包含一个特殊的指针,这个指针的名字是固定的,称为this。它是指向本类对象的指针,它的值是当前被调用的成员函数所在的对象的起始地址。 3、this 指针 int Box∷volume( ) {return (height*width*length); } int Box∷volume(Box *this) {return(this-height * this-width * this-length); } a.volume(a); 这些都是编译系统自动实现的,在需要时也可以显式地使用this指针。 §10 共用数据的保护 C++虽然采取了不少有效的措施(如设private保护)以增加数据的安全性,但是有些数据却往往是共享的,人们可以在不同的场合通过不同的途径访问同一个数据对象。有时在无意之中的误操作会改变有关数据的状况,而这是人们所不希望出现的。 既要使数据能在一定范围内共享,又要保证它不被任意修改,这时可以使用const,即把有关的数据定义为常量。 一、常对象 定义常对象的一般形式为: 类名 const 对象名[(实参表列)]; 或 const 类名 对象名[(实参表列)]; 凡希望保证数据成员不被改变的对象,可以声明为常对象: const Time t1(10,15,36); t1.get_time( );× 如果一个对象被声明为常对象,则不能调用该对象的非const型的成员函数(除了由系统自动调用的隐式的构造函数和析构函数),这是为了防止这些函数会修改常对象中数据成员的值 一、常对象 若需引用常对象中的数据成员,只需将该成员函数声明为const即可,即常成员函数: void get_time( ) const; 常成员函数可以访问常对象中的数据成员,但仍然不允许修改常对象中数据成员的值。 如在编程时有要求,一定要修改常对象中的某个数据成员的值,可以把该数据成员声明为mutable(可变的数据成员): mutable int count; 二、常对象成员 1、常数据成员 用关键字const来声明常数据成员。常数据成员的值是不能改变的 只能通过构造函数的参数初始化表对常数据成员进行初始化 const int hour; Time∷Time(int h):hour(h){ } 二、常对象成员 2、常成员函数 一般的成员函数可以引用本类中的非const数据成员,也可以修改它们。如果将成员函数声明为常成员函数,则只能引用本类中的数据成员,而不能修改它们: void get_time( ) const; const是函数类型的一部分,在声明函数和定义函数时都要有const关键字,在调用时不必加const 常成员函数可以引用const数据成员,也可以引用非const的数据成员。const数据成员可以被const成员函数引用,也可以被非const的成员函数引用。 二、常对象成员 2、常成员函数 对常成员函数的说明: (1)如果在一个类中,有些数据成员的值允许改变,另一些数据成员的值不允许改变,则可以将一部分数据成员声明为const,以保证其值不被改变,可以用非const的成员函数引用这些数据成员的值,并修改非const数据成员的值 (2)如果要求所有的数据成员的值都不允许改变,则可以将所有的数据成员声明为const,或将对象声明为const(常对象),然后用const成员函数引用数据成员 对常成员函数的说明: (3)如果已定义了一个常对象,只能调用其中的const成员函数,而不能调用非const成员函数(不论这些函数是否会修改对象中的数据)。这是为了保证数据的安全。 如果需要访问对象中的数据成员,可将常对象中所有成员函数都声明为const成
您可能关注的文档
最近下载
- 工程材料与机械制造基础(山东大学)中国大学MOOC 慕课 章节测验 答案.docx VIP
- 经皮去肾神经术治疗高血压临床路径中国专家共识(2025版).docx VIP
- 杜克LS-P激光测距仪说明书(打印).docx VIP
- 2026云南大理州南涧彝族自治县供排水有限责任公司考核招聘4人考试笔试参考题库及答案解析.docx VIP
- 2026年大理州南涧县供排水有限责任公司考核招聘工作人员(4人)考试笔试模拟试题及答案解析.docx VIP
- 药物临床试验应知应会.pdf VIP
- 2026云南大理州南涧彝族自治县供排水有限责任公司考核招聘4人考试笔试模拟试题及答案解析.docx VIP
- 红色小故事(完整版).doc VIP
- 2026云南大理州南涧彝族自治县供排水有限责任公司考核招聘4人考试笔试备考题库及答案解析.docx VIP
- 四川省泸州市泸县第二中学等六校联考2025-2026学年上学期九年级物理期末预测练习试卷( 含答案).pdf VIP
原创力文档

文档评论(0)