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

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

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

函数重载

①普通函数重载

②构造函数重载

③成员函数重载

具体略......

运算符重载

运算符重载规则:

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

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

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

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

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

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

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

例如:......

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

省略处懒得写了。

运算符重载形式:

①重载为类的成员函数

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

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

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

 1 #include
 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<<'('<','<'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
 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<<'('<','<'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、

转载于:https://www.cnblogs.com/tenjl-exv/p/7600347.html

更多相关:

  • python基本语法有哪些? python基本语法总结: 1.Python标识符 在 Python里,标识符有字母、数字、下划线组成。 在 Python中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。 Python中的标识符是区分大小写的。 以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo的代表不能直...

  • 我们可以重定义或重载大部分 C++ 内置的运算符。这样,就能使用自定义类型的运算符。 重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。 Box operator+(const Box&); 声明加法运算符用于把两个 Box 对...

  • 草色新雨中, 松声晚窗里。之前我们学习 Power Query 都是用鼠标就完成了很多复杂的操作。虽然 PowerQuery 已经将大部分常用功能内置成到功能区。基本能完成我们大部分的报表自动化功能。但是总有些复杂的或者个性化的问题是开发团队没有预先想到的,这时我们就需要学习 M 语言。一、M 语言在哪里?M语言的函数公式有三个地...

  • 前言从2020年3月份开始,计划写一系列文档--《小白从零开始学编程》,记录自己从0开始学习的一些东西。第一个系列:python,计划从安装、环境搭建、基本语法、到利用Django和Flask两个当前最热的web框架完成一个小的项目第二个系列:可能会选择Go语言,也可能会选择Vue.js。具体情况待定,拭目以待吧。。。基本概念表达式表...

  • 1.1函数1.1.1什么是函数函数就是程序实现模块化的基本单元,一般实现某一功能的集合。函数名:就相当于是程序代码集合的名称参数:就是函数运算时需要参与运算的值被称作为参数函数体:程序的某个功能,进行一系列的逻辑运算return 返回值:函数的返回值能表示函数的运行结果或运行状态。1.1.2函数的作用函数是组织好的,可重复使用的,用来...

  • 原标题:基于Python建立深度神经网络!你学会了嘛?图1 神经网络构造的例子(符号说明:上标[l]表示与第l层;上标(i)表示第i个例子;下标i表示矢量第i项)单层神经网络图2 单层神经网络示例神经元模型是先计算一个线性函数(z=Wx+b),接着再计算一个激活函数。一般来说,神经元模型的输出值是a=g(Wx+b),其中g是激活函数(...

  • 在学习MySQL的时候你会发现,它有非常多的函数,在学习的时候没有侧重。小编刚开始学习的时候也会有这个感觉。不过,经过一段时间的学习之后,小编发现尽管函数有很多,但是常用的却只有那几个。今天小编就把常用的函数汇总一下,为大家能够能好的学习MySQL中的函数。MySQL常使用的函数大概有四类。时间函数、数学函数、字符函数、控制函数。让我...