- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++程序设计教程 第 9 章 友元与运算符重载 第9章 友元函数与运算符重载9.1 友元函数与友元类9.2 运算符重载9.3 一元运算符重载9.4 二元运算符重载 ● 习题 ● 实验 ● 课堂练习 【实验指导】 1. 两个复数的加法运算,是实部和虚部分别相加,因此定复数类的数据成员有两个:real和image分别保存复数的实部和虚部。“+”运算符是个二元运算符,用成员函数重载时,函数有一个形参,是复数类的对象,另一个对象是当系统自动调用重载函数时,调用成员函数的。在函数体内,用调用成员函数的对象的实部和虚部分别和形参对象的实虚部相加,完成复数的加法运算,最后,函数返回保存运算结果的对象值。用友元函数重载二元运算符,函数的形参个数比用成员函数重载多一个,因为友元函数的调用形式类同与普通函数。 2. 左移和右移运算符都是二元运算符,因此可以把移动的位数作为重载函数的形参。私有数据成员是指针变量,只能保存一个地址,因此要用new运算符动态申请空间,来保存要移位的字符串。朝左移位时,首先把当前位置的字符保存下来,然后把其后的字符依次朝左移动,覆盖掉前一个字符,最后把保存下来的字符赋值给本次移位的最后一个字符。 实验 一、选择题1. 以下关于类的友元函数的描述中,不正确的是( ) 。A. 一个类的友元函数要用“friend”说明B. 友元函数在类体中说明时,不受类中访问权限的限制C. 友元函数的作用域与类中成员函数的作用域相同D. 友元函数体的定义通常放在类体之外 2. 下面对于友元函数描述正确的是( ) 。A. 友元函数的实现必须在类的内部定义B. 友元函数是类的成员函数C. 友元函数破坏了类的封装性和隐藏性D. 友元函数不能访问类的私有成员 3. 类A是类B的友元,类B是类C的友元,则正确说法是( ) 。A. 类B是类A的友元 B. 类C是类A的友元C. 类A是类C的友元 D. 以上都不对 课堂练习 C C D 计算机科学与工程学院 JIANGSU UNIVERSITY of SCIENCE TECHNOLOGY 计算机科学与工程学院 JIANGSU UNIVERSITY of SCIENCE TECHNOLOGY 学好程序设计的根本方法是 程序! 写 9.1 友元函数与友元类 为了强调数据的安全性,程序设计中通常将一些关键成员设为私有访问特性,只允许类的成员函数直接访问,其他函数必须间接访问。同时,C++通过友元方案,向用户提供了从类的外部直接访问类中所有访问权限成员的接口,包括: (1) 友元函数——把外部函数说明为本类的友元,则在该外部函数中可以直接访问本类的所有访问权限成员; (2) 友元成员函数——把其他类的成员函数说明为本类的友元,则该成员函数是本类的友元函数; (3) 友元类——把其他类说明为本类的友元,则该类的所有成员函数都是本类的友元函数。 1. 友元函数概念 类中用关键字friend说明或定义的外部函数,成员的访问权限对其不起作用,即可以访问类中所有访问权限的成员。 2. 友元函数定义(1) 类中说明,类外定义 ① 类中原型说明: friend 类型 函数名(形参列表); ② 类外定义: 类型 函数名(形参列表){ 函数体 }(2) 类中直接定义 friend 类型 函数名(形参列表){ 函数体 } 9.1.1 友元函数 【例9-1】求圆柱体的体积(友元、成员与普通函数比较)#includeiostream.hconst float PI=3.1415 ;class A { float r,h;public: A(float a,float b){r=a;h=b;} float v1( ){ return PI*r*r*h;} float getr(){return r;} float geth(){return h;}}; float v2(A t){ return PI*t.getr()*t.getr()*t.geth();} float v3(A t){ return PI*t.r*t.r*t.h;} 9.1.1 友元函数 void main(){ A a1(25,
文档评论(0)