重载1
来源:互联网 发布:帝国cms二次开发 编辑:程序博客网 时间:2024/06/06 02:04
1.概念:两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据实参和形参的类型及个数的最佳匹配,自动确定调用哪一个函数。就是函数的重载。
C++允许功能相近的函数在相同的作用域内以 相同的函数名,从而形成重载。
2.注意:函数的参数必须不同:个数不同或者类别不同。
[cpp] view plaincopy
<strong><spanstyle="font-size: 18px; ">int add (int x,int y);
int add(float x,float y);
int add(int x, int y);
int add(int x, int y, int z);
重载函数功能必须相同,下面程序会出现调用错误。
int add (int x,int y){return x+y;}
float add(float x,float y){returnx-y; }
[cpp] view plaincopy
具有默认形参值的函数的重载形式时,需要注意防止二义性。
void fun(intlength);</span></strong>
3.应用举例
using namespace std;
int sumofsquare(int a,int b)
{
return a*a+b*b;
}
double sumofsquare(double a,doubleb)
{
return a*a+b*b;
}
int main()
{
int m,n;
cout<<"entern two integer:"
cin>>m>>n;
count<<"their sum ofsquare:"<<sumof square(m,n)<<end1;
double x,y;
cout<<"enter two realnumber:";
cin>>x>>y;
count<<"their sum ofsquare:"<<sumofsqure(x,y)<<end1;
retrun 0;
}
二、运算符重载
1.概念:运算符重载是对已有的运算符号赋予多重含义,使同一个运算符作用于不同类型的数据时的不同行为
2.理解:运算符的重载的实质就是函数的重载,实现过程中将运算表达式转化为对运算函数的调用,将运算对象转化为运算符函数的实参。
3.C++中预定义的运算符只能作用于基本的数据类型,对用户自定义的数据类型进行操作需要进行运算符重载。
4.运算符重载的运算
(1)C++中所有的运算符中,存在少部分不能重载。不能重载的(类属关系 "." ,成员的指针运算符“.*”,作用域运算符“::”,三目运算符“?:”
(2)重载之后运算符的优先级和结合性都不变。
(3)运算符重载是针对新类型数据的实际需要,对原来的运算符做出相应的改变,一般来讲功能与原来相似,操作数的个数相同,并且至少有一个是自定义的类型。
5.运算符的重载形式有两种:重载为类的非静态成员函数和重载为非成员函数。
两种重载的语法形式:
返回值类型operator 运算符(形参表)
函数体
返回值类型:重载运算符的返回值类型,运算结果类型。
定义运算符重载函数的关键字。
运算符:重载的元算符名称。
形参表:给出重载运算符中需要的参数和其类型。
提示:当以非成员函数重载运算符时,有时需要访问运算符所涉及类的私有成员,这时可以把该函数声明为类的友元函数。
重载为类的成员函数时,函数的参数比原来的操作数少一个(第一个操作数被作为函数调用的目的对象,无需出现在参数表中,函数可以直接访问第一操作数的成员)
重载为类的非成员函数时,参数的个数和操作数的个数是相同的。
优点:改变现有运算符的操作方式,以用于类类型,使函数程序更加直观。
5.运算符重载为成员函数
重载为成员函数,就可以自由的访问本类的数据成员,实际应用时是通过该类的的对象来访问重载的运算符。
双目运算符:左操作数是对象本身的数据,有this指针指出。右操作数则需要通过运算符重载函数的参数表来传值。
单目运算符:操作数由对象this指针给出,就不再需要任何参数。
理解:双目运算符B,要重载为类的成员函数,实现oprd1 B oprd2,其中oprd1为A类的对象,应该把B重载为A类的成员函数,该函数只有一个形参,形参的的类型是oprld所属的类型。经重载之后,表达式oprd1 B oprd2 就相当于函数调用
单目运算符U,重载为类的成员函数,Uoprd ,其中oprd 为A类对象,则U 该重载为A类成员函数,函数没有形参。重载之后,U oprd 相当于 oprd.operatorU()。后置运算符“++”“--”,"oprd --""oprd++"重载后这个函数要带一个int 形参,用于区别前置和后置。
6.程序:复数类加减法运算重载为成员函数形式
分析:是一个双目运算重载为成员函数的实例,把‘+’‘-’重载为复数类的成员函数,重载函数只有一个形参,类型是复数类对象。(MUL图)
#include<iostream>
using namespace std
class complex //复数类定义
{
public: //外部接口
complex (double r=0.0 ,double i=0.0):real(1),imag(i){} //构造函数
complex operator +(const complex &c2) const; //运算符+重载成员函数
complex operator -(const complex &c2) const; //运算符-重载成员函数
void display() const; //输出函数
private: //私有成员
double real; //复数实部
double imag; //复数虚部
};
complex complex ::operatop+(const complex&c2) const //重载运算符函数实现
{
return complex (real+c2.real, imag+c2.imag); //创建一个临时无名对象作为返回值
}
complex complex ::operator -(const complex&c2) const
{
return complex (real-c2.real,imag-c2.imag);
}
void complex ::display () const
{
cont<<"("<<real<<",<<imag<<")"<<end1;
} int main ()
{
complex c1(5,4),c2(2,10),c3; //定义复数类的对象 cout<<"c1=";c1.display();
cout<<"c2=";c2.display();
c3=c1-c2;
cout<<"c3=c1-c2";c3.display(); //使用重载运算完成复数减法
c3=c1+c2;
cout<<"c3=c1+c2=";c3.display();
return 0; }
- 重载1
- 重载操作符 1
- Java---方法重载1
- 运算符重载1
- 运算符重载1
- 函数重载1
- 运算符重载(1)
- 5.5.1 没有重载
- 重载<<
- 重载
- 重载
- 重载
- 重载
- 重载()
- 重载
- 重载
- 重载
- 重载
- 利用typedef定义函数指针(转载自ITeye)
- UpdateLayeredWindow和SetLayeredWindowAttributes
- 设计模式(单例、装饰、享元、模板)
- 安卓开发的一些备忘问题
- 微软宣布推出Windows Embedded Compact 2013正式版
- 重载1
- Codeforces Round #188 (Div. 2) B. Strings of Power
- ACE 中 ACE_Mem_Map 类的简单简单测试
- Java Final Keyword
- 可视化调试:基于共享内存发送数据
- Android 星级评分条DEMO
- nfs的使用
- Uboot目录结构
- windows位图与调色板