c++重载(以运算符重载为主)

重载(OverLoading)是面向对象程序设计多态性的一种体现。所谓重载,是指“同一标识符”在同一作用域的不同场合具有不同的语义,这个标识符可以是函数名或运算符。也就是说,重载可以使多个函数使用同一个函数名,或者同一个运算符代表不同的运算规则。因此,重载包括函数重载运算符重载,使c++使用重载是为了使程序更加简洁。

函数重载

①普通函数重载

②构造函数重载

③成员函数重载

具体略......

运算符重载

运算符重载规则:

①c++中的运算符除了少数几个以外,全部可以重载,具体规则......

②c++不允许用户自定义新的运算符,只能对c++已有的运算符进行重载。不能重载的有:. * :: sizeof ?: 这五个。

③重载不能改变运算符运算对象(即操作数)的个数。

④重载不能改变运算符的优先级和结合性。

⑤重载运算符必须和用户所定义的自定义对象一起使用,使其参数......

⑥重载运算符的参数不能有默认参数,否则就企图改变运算符参数的个数。

⑦对于类对象的运算符一般必须重载,但有两个例外,运算符 = 和 & 不必用户重载。

例如:......

⑧运算符重载是对......

省略处懒得写了。

运算符重载形式:

①重载为类的成员函数

语法格式: type operator 运算符(形式参数表)

参数表中的参数数目与要重载的运算符有关。如果重载弹幕运算符,则参数表是空的,此时当前对象作为运算符的单操作数;如果重载双目运算符,则参数表中有一个操作数,运算时左操作数是当前对象本身的数据,参数表中的操作数作为右操作数。

例:重载运算符'+',使之能用于两个复数相加:

 1 #include<iostream>
 2 using namespace std;
 3 
 4 class Complex
 5 {
 6     public:
 7         Complex(){real=0;imag=0;}
 8         Complex(double r,double i){real=r;imag=i;}
 9         Complex operator +(Complex& c2);
10         void display()
11         {
12             cout<<'('<<real<<','<<imag<<'i'<<')'<<endl;
13         }        
14     private:
15         double real;
16         double imag;
17 };
18 
19 int main()
20 {
21     Complex c1(3,4),c2(5,-10),c3;
22     c3=c1+c2;
23     c1.display();
24     c2.display();
25     c3.display(); 
26     
27     return 0;
28 }
29 
30 Complex Complex::operator +(Complex& c2)
31 {
32     Complex c;
33     c.real=real+c2.real;
34     c.imag=imag+c2.imag;
35     return c;
36 }

运行结果:

 

②重载为类的友元函数

语法格式: friend type operator 运算符(形式参数表)

其中,friend是声明友元的关键字,type为函数返回类型;operator是定义运算符重载函数的关键字;“运算符”是要重载的运算符符号;参数表给出该运算符所需要的参数。

例:重载运算符'+',使其实现复数相加,用友元函数实现。

 1 #include<iostream>
 2 using namespace std;
 3 
 4 class Complex
 5 {
 6     public:
 7         Complex(){real=0;imag=0;}
 8         Complex(double r,double i){real=r;imag=i;}
 9         friend Complex operator +(Complex& c1,Complex& c2);
10         void display()
11         {
12             cout<<'('<<real<<','<<imag<<'i'<<')'<<endl;
13         }        
14     private:
15         double real;
16         double imag;
17 };
18 
19 int main()
20 {
21     Complex c1(3,4),c2(5,-10),c3;
22     c3=c1+c2;
23     c1.display();
24     c2.display();
25     c3.display(); 
26     
27     return 0;
28 }
29 
30 Complex operator +(Complex& c1,Complex& c2)
31 {
32     Complex c;
33     c.real=c1.real+c2.real;
34     c.imag=c1.imag+c2.imag;
35     return c;
36     
37     //or
38     //return Complex(c1.real+c2.real,c2.imag+c2.imag);
39 }

运行结果和上面重载为类的成员函数相同。

③其他用算符的重载

自加(++)自减(--)运算符重载:为了方便起见,重载为类的成员函数。

赋值(=)(+= 、-=、*=、/=)运算符重载:解决指针悬挂问题。

下标运算符[]:一般采用成员函数的形式重载,主要应用是读取数组的某个元素。

函数调用运算符()的重载:......。

PS:重载运算符[]和()时只能定义为成员函数,而不能用友元函数。

输入输出流运算符:(输出流运算符:<<和输入流运算符:>>)

输入输出流运算符是c++类库提供的......(自行了解)

对“>>”和“<<”重载的函数形式如下:

istream & operator >> (istream&,自定义类&);

ostream & operator << (ostream&,自定义类&);

重载">>"和"<<"的函数作为友元函数,而不能将它们定义为成员函数。

例子略......

v、

posted @ 2017-09-28 14:59  T丶jl  阅读(4020)  评论(0编辑  收藏  举报