找回密码
 注册

QQ登录

只需一步,快速开始

查看: 942|回复: 0

大工20春《c&c 语言程序设计》十七

[复制链接]
发表于 2021-2-25 11:17:26 | 显示全部楼层 |阅读模式
    C/C++语言程序设计辅导资料十七
一、主题:运算符重载二、学习时间:2020年7月20日-7月26日“不忘初心、牢记使命”主题理论学习:
忠诚是共产党人必须具备的优秀品格。“忠诚印寸心,浩然充两间”的坚毅,“砍头不要紧,只要主义真”的无畏,腹中满是草根而宁死不屈的气节,食指钉入竹签而永不叛党的坚贞,无数先烈用鲜血诠释了对党的忠诚。对党忠诚必须是纯粹的、无条件的,是政治标准、更是实践标准,鲜明体现在坚决贯彻答案决策部署上。
摘选自《在第十九届中央纪律检查委员会第二次全体会议上的讲话》三、知识脉络:
第12章 类与对象
12.1 运算符重载规则与成员函数实现运算符重载
12.2 友元函数实现运算符重载四、学习要求:
理解运算符重载的意义
掌握运算符重载规则
掌握运算符重载三种实现方法
掌握成员函数实现运算符重载
掌握普通函数实现运算符重载
理解运算符重载三种实现方法的区别
掌握友元函数实现重载运算符五、重点难点:
成员函数运算符重载
友元函数运算符重载六、主要内容:
1.理解运算符重载
使用运算符对各种数据进行操作,高效快捷且清晰易懂。
如果运算符也能作用于各种类对象,会使代码简洁而优雅。2.运算符重载规则
重载运算符函数可以对运算符作出新的解释,原有基本语义不变:
不能创建新的运算符
不能改变运算符的优先级和结合性
不能改变运算符所需要的操作数
不能改变该运算符用于基本类型变量时的含义
可以重载大部分已有的运算符
特殊的运算符不允许被重载,比如  .         ::         .*         ?:         sizeof  #等
不必重载的运算符,比如  =  &3.成员函数重载运算符
语法形式
类型   类名  ::  operator  op ( 参数表 )
                     {
                          // 相对于该类定义的操作
                     }
何时用成员函数重载算符?
当一元运算符的操作数,或者二元运算符的左操作数是该类的一个对象时,重载运算符函数为成员函数。
当一个运算符的操作需要修改类对象状态时,应该以成员函数重载。4.友元函数重载运算符
友元函数重载运算符常用于运算符的左右操作数类型不同的情况。5.举例
class Complex                              //定义Complex类
{ public:
    Complex( ){dReal=0;dImag=0; }           //定义构造函数
    Complex(double r, double i)                 //重载构造函数
       { dReal = r;  dImag = i; }
    Complex operator + ( const Complex &c2);  //两个复数相加函数
    Complex operator + (double d);            //复数和实数相加函数
     void print( )const;  
  //友元函数重载+与-
friend Complex operator+( double d, const Complex &c) ;   
friend Complex operator-( const Complex &c1, const Complex &c2) ;
friend Complex operator-( const Complex &c1) ;
private:
    double dReal; double dImag;               //实部与虚部
};//成员函数实现
Complex Complex:perator + (const Complex &c2){
return Complex ( dReal+c2.dReal, dImag+c2.dImag); }   
Complex Complex:perator + (double  d) {
return Complex ( dReal+d, dImag);  }  
void Complex::print( )const {
    cout << '(' << dReal << ", " << dImag << ')' << endl; }//友元函数实现
Complex operator+( double d, const Complex &c) {
return Complex ( d + c. dReal, c.dImag); }
Complex operator-( const Complex &c) {
return Complex (-c. dReal, -c.dImag); }
Complex operator-( const Complex &c1 ,const Complex &c2) {
return Complex (c1. dReal -c2. dReal, c1. dImag -c2.dImag); }int main( ){
    Complex c0,c1(-3,4),c2(1,-10);                     
    double  d1=5.5, d2=0.5;
    d1= d1 + d2;                                       //内部定义的+操作
    c0 = c1+c2;  cout << "c1 + c2 = ";      //c1.operator +(c2)
    c0.print( );   
    c0 = c1 + d1; cout << "c1 + d1 = ";     //c1.operator +(d)
    c0.print( );
    c0 = d1+ c1;         cout << "d1 + c1 = ";     //operator +(d, c1)           
    c0.print( );                              
    c0 = c1-c2; cout << "c1 - c2 = ";         //operator -(c1, c2)                           
    c0.print( );                          
    c0 = -c2;    cout << " - c2 = ";             //operator -( c2)              
     c0.print( );     return 0;
}运行结果:
c1 + c2 = (-2, -6)
c1 + d1 = (3, 4)
d1 + c1 = (3, 4)
c1 - c2 = (-4, 14)
- c2 = (-1, 10)七、习题:
1.下列关于运算符重载的描述中, 正确的是(    ) 。
A.运算符重载可以改变运算符的操作数的个数
B.运算符重载可以改变优先级和结合性
C.运算符重载可以改变该运算符用于基本类型变量时的含义
D.以上说法都不对
答案:D2.在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是(    )。
A.作为友元函数重载的1元运算符
B.作为成员函数重载的1元运算符
C.作为友元函数重载的2元运算符
D.作为成员函数重载的2元运算符
答案:B3.下列运算符不能用友元函数重载的是(    )。
A.+
B.=
C.++
D.<<   
答案:B
   
4.友元运算符obj1>obj2被C++编译器解释为(    )。
A.operator>(obj1,obj2)
B.>(obj1,obj2)
C.obj2.operator>(obj1)
D.obj1.oprator>(obj2)
答案:A
   
5.如果表达式a+b中的"+"是作为成员函数重载的运算符,若采用运算符函数调用格式,则可表示为(    )。  
A.a.operator+(b)
B.b.operator+(a)
C.operator+(a,b)     
D.operator(a+b)
答案:A
   
6.如果表达式a++中的"++"是作为普通函数重载的运算符,若采用运算符函数调用格式,则可表示为(    )。
A.a.operator++()
B.operator++(a)
C.operator++(a,1)     
D.operator++(1,a)
答案:C7.如果表达式a==b中的"=="是作为T类重载的运算符,若采用运算符函数调用格式,则可表示为(    )。
A.a.operator==(b)
B.b.operator==(a)
C.operator==(a,b)     
D.operator==(b,a)
答案:A
南开答案可以联系QQ 761296021

QQ|手机版|小黑屋|网站地图|无忧答案网 ( 冀ICP备18010495号-1 )

GMT+8, 2024-5-4 09:53

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表