下载此文档

c 课件:第五章.ppt


文档分类:IT计算机 | 页数:约85页 举报非法文档有奖
1/85
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/85 下载此文档
文档列表 文档介绍
第五章 多态性
一、编译时的多态性和运行时的多态性
(1)什么是多态性?
多态性是指当一个对象收到同一消息时,产生不同的动作。
如函数的多态性。
在静态编译时支持的多态性称为编译时多态性,也称静态多态性。
如函数重载和运算符重载。
在动态运行时支持的多态性称为运行时多态性,称为动态多态性。
如继承和虚函数。
二、函数重载
例子:
#include <>
class point{
int x,y;
public:
point(int a,int b) {x=a;y=b;}
float area() {return ;}
float area(int a,int b) {return a*b;}
};
 class circle:public point{
int radius;
public:
circle(int x,int y,int rad) : point(x,y)
{radius=rad;}
float area()
{return *radius*radius;}
};
main(){
point p(20,20);
circle c(8,8,2);
cout<<()<<endl;
cout<<(1,1)<<endl;
cout<<()<<endl;
cout<<::area()<<endl;

return 0;
}
在基类和派生类中的函数重载有两种情况:
一种是参数有所差别,这种情况包含两种。
一种是参数个数和类型完全相同,属于类不同,可以用对象名区分,
调用各自类的函数。使用::符号来指定调用函数所在的类。

编译器的重载函数区分方法:“名字压延”
三、运算符重载
 
运算符重载:<<、>>等
运算符重载通过创建运算符函数operator来实现。
 
问题一:复数的+-、*、/,分数的+、-、*、/
不能直接操作:复数A+复数B
运算符实际上对应一个函数,如:
+:对应operator+( )
< :对应operator<( )
 
//注意,plex operator+(complex plex om2){
complex temp;
=+;
=+;
return temp;
}
下面哪种方法正确:
total1=operator+(2); //显式
2; //隐式
只有少数的C++语言的运算符不能重载:
运算符
语义
.
成员运算符
.*
指向成员的指针
*
仅在前缀使用时
::
作用域运算符
? :
条件运算符
sizeof
计算类型空间
#include ""
 
plex{
public:
double real,imag;
complex(double r=0,double i=0)
{real=r,imag=i;}
};
 
//plex operator+(complex plex om2)
{
complex temp;
=+;
=+;
return temp;
}
main(){
1(,),com2(,),total1,total2;
total1=operator+(2);
cout<<"real1="<<<<" "<<"imag1="<<<<endl;
2;
cout<<"real2="<<<<" "<<"imag2="<<<<endl;
 
return 0;
}
·程序员不能创建新的运算符
·运算符不能改变运算符用于内部类型对象时的含义。例如,程序员不能改
变运算符+用于两个整数时的含义。
·运算符只能和用户自定义类型的对象一起使用,或者用于用户自定义类型
的对象和内部类型混合使用。
·重载了运算符+: obj2=obj2+obj1;
并不意味着相应的+=有: obj2+=obj1;成立
·不能改变运算符的参数个数,单目的就是单目,双目的就是双目
·不能改变优先级
可重载的运算符与不可重载的运算符(见书)
.* Dereference pointers to class members(指针逆向引用)

c 课件:第五章 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数85
  • 收藏数0 收藏
  • 顶次数0
  • 上传人文库旗舰店
  • 文件大小434 KB
  • 时间2018-05-13