3.1类与对象的定义 314访问对象的成员 访问对象的成员包括读写对象的数据成员和调用它的 成员函数,其访问格式是: 对象名成员名 如上例中,对象的主函数如下 void maino Record bookl book2;/定义对象 book 1和book2 /调用成员函数 regist,给book的两个数据成员 / bookname和 number赋值 book1. regist(“C++编程教程”,1001); /调用成员函数 regist,给book2的两个数据成员赋值 book2 regist(C++语言参考”,1002) U回
返回 16 3.1 类与对象的定义 3.1.4 访问对象的成员 访问对象的成员包括读写对象的数据成员和调用它的 成员函数,其访问格式是: 对象名.成员名 如上例中,对象的主函数如下: void main() { Record book1,book2; //定义对象book1和book2 //调用成员函数regist,给book1的两个数据成员 //bookname和number赋值 book1.regist(“C++编程教程” , 1001); //调用成员函数regist,给book2的两个数据成员赋值 book2.regist(“C++语言参考” , 1002);
3.1类与对象的定义 调用成员函数how,显示 book 1对象的数据成员 / bookname和 Inumber的值 bookl showO 调用成员函数how,显示book2对象的数据成员 / bookname和 Inumber的值 book2. showO 如改为下面的代码,则错误 void maino i Record bookl, book2 /于 bookname和 numbe是类 Record的私有成员,在类外 /不能直接使用 U回
返回 17 3.1 类与对象的定义 //调用成员函数show,显示book1对象的数据成员 //bookname和number的值 book1.show(); //调用成员函数show,显示book2对象的数据成员 //bookname和number的值 book2.show(); } 如改为下面的代码,则错误: void main() { Record book1,book2; //由于bookname和number是类Record的私有成员,在类外 //不能直接使用
3.1类与对象的定义 strcpy(book. bookname“C艹+编程教程”) book 1 number=1001 strcpy(book2 bookname,“C++语言参考”); book 2. number=1002 book1.showO book2. showo 注意: 1.对于类的私有成员,只能通过其成员函数来访问,不能 在类外对私有成员访问。 U回
返回 18 3.1 类与对象的定义 strcpy(book1.bookname,“C++编程教程”); book1.number=1001; strcpy(book2.bookname,“C++语言参考”); book2.number=1002; book1.show(); book2.show(); } 注意: 1. 对于类的私有成员,只能通过其成员函数来访问,不能 在类外对私有成员访问
3.1类与对象的定义 2.调用成员函数时要在函数名之前加上对象名和""即可, 即先指明对象,再指明成员。也可以采用指向对象的指 针来访问,但要在函数名前加上指针变量名和“ 3.任何对对象私有数据的访问都必须通过向对象发送消 息来实现,而且所发送的消息还必须是该对象能够识别 和接受的。在C++中,消息发送正是通过公有成员函数的 调用来实现的。由于类接口隐藏了对象的内部细节,用 户只能通过类接口访问对象,因此,在类设计中必须提 供足够的公有接口以捕获对象的全部行为,这正是类设 计中的一个最基本的要求。 4.上例中,在对象调用book1 regist(“C++编程教程”, 1001);时,成员函数 regist除了接受两个实参外,还接 U回
返回 19 3.1 类与对象的定义 2. 调用成员函数时要在函数名之前加上对象名和"."即可, 即先指明对象,再指明成员。也可以采用指向对象的指 针来访问,但要在函数名前加上指针变量名和“->” 。 3. 任何对对象私有数据的访问都必须通过向对象发送消 息来实现,而且所发送的消息还必须是该对象能够识别 和接受的。在C++中,消息发送正是通过公有成员函数的 调用来实现的。由于类接口隐藏了对象的内部细节,用 户只能通过类接口访问对象,因此,在类设计中必须提 供足够的公有接口以捕获对象的全部行为,这正是类设 计中的一个最基本的要求。 4. 上例中,在对象调用book1.regist(“C++编程教程” , 1001);时,成员函数regist除了接受两个实参外,还接
3.1类与对象的定义 受了一个对象book1的地址,这个地址被一个隐含的形 参this指针所获取,它等同于执行this=&book1所以所 有对数据成员的访问都隐含地被加上前缀:this->因此 在成员函数体 regist中,执行 strcpy(bookname, a); number=b就等价于 strcpy(this->bookname, a); this->number=b 这样,上例中的成员函数 regist可这样定义 void record: regist(char *a, int b) i strcpy(this->bookname, a); this->number=b 通过以上手段就确保了不同对象调用成员函数时访问的 是不同对象的数据,而它们之间没有干扰。 U回
返回 20 3.1 类与对象的定义 受了一个对象book1的地址,这个地址被一个隐含的形 参this指针所获取,它等同于执行this=&book1,所以所 有对数据成员的访问都隐含地被加上前缀:this->,因此, 在成员函数体regist中,执行 strcpy(bookname,a);number=b;就等价于 strcpy(this->bookname,a); this->number=b; 这样,上例中的成员函数regist也可这样定义: void record::regist(char *a,int b) { strcpy(this->bookname,a); this->number=b; } 通过以上手段就确保了不同对象调用成员函数时访问的 是不同对象的数据,而它们之间没有干扰