欢迎来到天天文库
浏览记录
ID:6322099
大小:102.00 KB
页数:12页
时间:2018-01-10
《c++之运算符重载(1)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、转自:http://www.cnblogs.com/CaiNiaoZJ/archive/2011/08/12/2136598.html 在前一节中曾提到过,C++中运行时的多态性主要是通过虚函数来实现的,而编译时的多态性是由函数重载和运算符重载来实现的。这一系列我将主要讲解C++中有关运算符重载方面的内容。在每一个系列讲解之前,都会有它的一些基础知识需要我们去理解。而运算符重载的基础就是运算符重载函数。所以今天主要讲的是运算符重载函数。 1.运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用域不同类型的数据导致不同行为的发生。比如1inti
2、;2inti1=10,i2=10;3i=i1+i2;4std::cout<<"i1+i2="<
3、提供的预定义的基本数据类型毕竟是有限的,在解决一些实际的问题时,往往需要用户自定义数据类型。比如高中数学里所提到的复数:1classComplex//复数类2{3public:4doublereal;//实数5doubleimag;//虚数6Complex(doublereal=0,doubleimag=0)7{8this->real=real;9this->imag=imag;10}11}假如我们建立两个复数,并用"+"运算符让它们直接相加:1Complexcom1(10,10),com2(20,20),sum;2sum=com1+com2;那么会提示没有与这些
4、操作数匹配的"+"运算符的错误。这是因为Complex类类型不是预定义类型,系统没用对该类型的数据进行加法运算符函数的重载。C++就为运算符重载提供了一种方法,即运算符重载函数。其函数名字规定为operator后紧跟重载运算符。比如:operator+(),operator*()等。现在我们给上述程序声明一个加法运算符的重载函数用于完成复数的加法运算:ViewCode1#include"stdafx.h"2#include34classComplex//复数类5{6public:7doublereal;//实数8doubleimag;//虚数9
5、Complex(doublereal=0,doubleimag=0)10{11this->real=real;12this->imag=imag;13}14};1516Complexoperator+(Complexcom1,Complexcom2)//运算符重载函数17{18returnComplex(com1.real+com2.real,com1.imag+com2.imag);19}2021intmain()22{23Complexcom1(10,10),com2(20,20),sum;24sum=com1+com2;//或sum=operator+(co
6、m1,com2)2526std::cout<<"sum的实数部分为"<7、的数据成员是公有的性质,所以运算符重载函数可以访问。但如果定义为私有的呢,那该怎么办。其实,在实际的运算符重载函数声明当中,要不定义其为要操作类的成员函数或类的友元函数。 (1)运算符重载函数作为类的友元函数的形式: class类名 { friend返回类型operator运算符(形参表); } 类外定义格式: 返回类型operator运算符(参数表) { 函数体 }友元函数重载双目运算符(有两个操作数,通常在运算符的左右两则),参数表中的个数为两个。若是重载单目运算符(只有一个操作数),则参数表中只有一参数。i.友元函数重载双目运算符8、(+):V
7、的数据成员是公有的性质,所以运算符重载函数可以访问。但如果定义为私有的呢,那该怎么办。其实,在实际的运算符重载函数声明当中,要不定义其为要操作类的成员函数或类的友元函数。 (1)运算符重载函数作为类的友元函数的形式: class类名 { friend返回类型operator运算符(形参表); } 类外定义格式: 返回类型operator运算符(参数表) { 函数体 }友元函数重载双目运算符(有两个操作数,通常在运算符的左右两则),参数表中的个数为两个。若是重载单目运算符(只有一个操作数),则参数表中只有一参数。i.友元函数重载双目运算符
8、(+):V
此文档下载收益归作者所有