c++lab09随笔

 第5章  多态性
     5.1 编译时的多态性与运行时的多态性
     5.2 运算符重载
     5.3 类型转换

     5.4 虚函数


5.1

多态性是指用一个名字定义不同的函数,这些函数执行不同但又类似的操作,这样就可以用同一个函数名调用不同内容的函数。 

多态性包括编译时的多态性运行时的多态性

(1)编译时的多态性:静态联编支持的多态性称为编译时的多态性,也称静态多态性。

 静态联编----静态联编是指系统在[编译时]就决定如何实现某一动作。静态联编要求在程序编译时就知道调用函数的全部信息。 

                             通过               

                            ——>函数重载(包括运算符重载)

  编译时的多态性
                            ——>模板

 补充:

 static是静态变量,就是变量值不随函数执行结束而消失,下次调用同一函数时,上次所赋予的值仍存在

 const是常量,是不可改变的

(2)运行时的多态性:动态联编所支持的多态性称为运行时多态性,也称动态多态性。

 动态联编----动态联编是指系统在运行时动态实现某一动作。一直要到[程序运行时]才能确定调用哪个函数。  

                             通过
 运行时的多态性 ————>虚函数

补充:

程序是先自上而下编译再是运行  


5.2

  5.2.1  在类外定义的运算符重载函数
  5.2.2  友元运算符重载函数
  5.2.3  成员运算符重载函数
  5.2.4  成员运算符重载函数与友元运算符重载函数的比较
  5.2.5 “++”和“--”的重载
  5.2.6  赋值运算符“=”的重载

  5.2.7  下标运算符“[]”的重载 

 5.2.1  在类外定义的运算符重载函数

运算符函数:用于完成“+”“-”“*”“/”等操作的函数

运算符函数名:operator@(@指要重载的运算符),例如operator+,operator-,operator*,operator/等

运算符重载:两个或两个以上的运算符函数共有同一个运算符函数名


 C++系统预先编好的运算符函数不能完成将两个对象的相加工作。

解决方法如下:

complex operator+(complexco1,complex co2)
{
  complex  temp;
  temp.real=co1.real+co2.real;
  temp.imag=co1.imag+co2.imag;
  return  temp;
}

调用运算符函数operator+()的有2种方式:

第一种:total1=operator+(com1,com2);//显示调用

第二种:total2=com1+com2;//隐式(习惯)调用

注意:(1)以下运算符不能重载

  .          成员访问运算符
  .*         成员指针访问运算符
  ::         作用域运算符
  sizeof     长度运算符

  ?:         条件运算符

(2)不允许用户自己定义新的运算符进行重载。

  (3) 重载不能改变运算符的操作对象(即操作数)的个数。 
  (4) 重载不能改变运算符原有的优先级。
      例如,C++语言规定,先乘除,后加减,因此表达式:
             x=y-a*b;
        等价于  x=y-(a*b);

  (5) 重载不能改变运算符原有的结合特性。

        例如,在C++语言中乘、除法运算符“*”和“/”都是左结合的,

        因此表达式:   x=a/b*c;
             等价于  x=(a/b)*c;
         而不等价于  x=a/(b*c);

 (6) 运算符重载函数的参数至少应有一个是类对象(或类对象的引用)。

 (7)赋值运算符“=”,不必用户进行重载


解决类外定义的运算符函数,只能访问公有数据成员,而不能访问类的私有数据成员问题定义为它将要操作的类的成员函数(简称为成员运算符重载函数);或者定义为它将要操作的类的友元函数(简称为友元运算符重载函数)。

友元运算符重载函数定义:

  friend  函数类型 operator运算符(形参表)
  { 
       函数体
  }


补充:函数可以按照先声明使用的方式,在main函数前先加一句声明;

                也可以直接调用,把函数放在main函数前。


说明:在函数返回的时候,可以直接用类的构造函数来生成一个临时对象,而不对该对象进行命名





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值