}
private :
double Length;
double Width;
};
int main(){
int i;
double a,b,c,d,e;
double circumference,area;
Shape *s[4];
cout<<"圆的半径"<cin>>a;
Circle circle(a);
cout<<"椭圆长半径和短半径"<cin>>b>>c;
Ellipse ellipse(b,c);
cout<<"三角形三边:"<cin>>a>>b>>c;
Triangle triangle(a,b,c);
cout<<"长方形的长和宽:"<cin>>d>>e;
Rectangle rectangle(d,e);
s[0]=&circle;
s[1]=&ellipse;
s[2]=▵
s[3]=&rectangle;
for(i=0;i<4;i++)
{
circumference=circumference+s[i]->Circumference();
area=area+s[i]->Area();
s[i]->show();
}
cout<<"周长和:"<}
实验8--友元函数与运算符重载函数
实验十三 1.实验目的 通过本次实验 (1)理解友元函数与运算符重载函数的概念; (2)学会友元函数的定义与使用方法; (3)掌握运算符重载函数的定义与使用方法; 2.实验要求 (1)编写实验程序 (2)在VC++运行环境中,输入源程序 (3)编译运行源程序 (4)输入测试数据进行程序测试; (5)写出运行结果。 3.实验内容 (1)定义一个复数类,重载“-=”运算符,使这个运算符能直接完成复数的“-=”运算。分别用成员函数与友元函数编写运算符重载函数。在主函数中定义复数对象c1(10,20)、c2(15,30),进行c2-=c1的复数运算,并输出c1、c2的复数值。 参考资料: (1)成员函数 # include class Complex { private: float Real,Image; public: Complex(float r=0,float i=0) { Real=r;Image=i;} void Show(int i) { cout<<"c"< class Complex { private: float Real,Image; public: Complex(float r=0,float i=0) { Real=r;Image=i;} void Show(int i) { cout<<"c"<运算符重载练习题.
运算符重载 一.单项选择题 1.下列运算符中,运算符在C++中不能重载。 A.?: B.+ C. D.<= 解:C++中不能被重载的运算符有:·,一,::,?:。本题答案为A。 2.下列运算符中,运算符在C++中不能重载。 A.&& B.[] C.:: D.new 解:c++中不能被重载的运算符有:·,·+,::,?:。本题答案为c。 3.下列关于运算符重载的描述中,是正确的。 A.运算符重载可以改变操作数的个数 B.运算符重载可以改变优先级 C.运算符重载可以改变结合性 D.运算符重载不可以改变语法结构 解:运算符重载不能改变操作数的个数、运算符的优先级、运算符的结合性和运算程的语法结构。本题答案为D。 4.友元运算符objl>obj2被C++编译器解释为。 A.operator>(objl,obj2) B.>(obj1,obj2) C.obj2.operator:>(obj1) D.objl.operator>(obj2) 解:重载为友元函数的运算符的调用形式如下: operator<运算符>(<参数1>,<参数2>) 等价于:<参数1><运算符><参数2> 本题答案为A。 5.现需要对list类对象使用的逻辑运算符“==”重载,以下函数声明是正确的。 A、list & list::operator==(const list &a); B、list list::operator==(const list &a); C、bool & list::operator==(const list &a); D、bool list::operator==(const list &a); 6. 以下类中分别说明了“+=”和“++”运算符重载函数的原型。如果主函数中有定义: fun m,c,d;,那么,执行语句c=m++; 时,编译器把m++解释为: (33) A) c.operator++(m); B) m=operator++(m); C) m.operator++(m); D) operator++(m); class fun { public: .. .. .. fun operator +=(fun ); friend fun operator ++(fun &,int); }; 答案:D 7. 在第33题中,当执行语句d+=m; 时,C++编译器对语句作如下解释: (34) A. d=operator+=(m); B. m=operator+=(d); C. d.operator+=(m); D. m.operator+=(d); 答案:C 8. 设有以下类定义,其中说明了“+”运算符重载函数的原型。这是一个友元函数,当类
实验五 运算符重载
实验五运算符重载 【实验目的】 1.进一步了解运算符重载的概念和使用方法。 2.掌握几种常用的运算符重载的方法。 3.了解转换构造函数的使用方法。 4.了解在Visual C++6.0环境下进行运算符重载要注意的问题. 【实验要求】 1.硬件基本配置:Intel PentiumIII以上级别的CPU,大于64MB的内存。 2.软件要求:Window 2000操作系统,Visual Studio 6.0或更高版本开发环境。 3.实验学时:2学时 4.实现实验内容中的题目。 5.写实验报告 【实验内容】 (1)声明一个复数类Complex,重载运算符“+’’,“一”,“*”,“/”使之能用于复数的加、减、乘、除.运算符重载函数作为Complex类的成员函数,重载流提取运算符实现对复数的输出。编程序,分别求两个复数之和、差、积和商并用重载后的流运算符进行输出。 请思考:你编的程序能否用于一个整数与一个复数的算术运算?如4+ (5-2i). (2)声明一个复数类Complex,重载运算符“+“,使之能用于复数的加法运算。 参加运算的两个运算量可以都是类对象.也可以其中有一个是整数,顺序任意。例如, cl+c2, i+cl,cl+i均合法(设i为整数,c1, c2为复数)。 运行程序.分别求两个复数之和、整数和复数之和。 (3)有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于矩阵相加。如c=a+b。重载流提取运算符实现对矩阵的输出如:cout<国家二级C++机试(运算符重载、模板和C++流)模拟试卷7
国家二级C++机试(运算符重载、模板和C++流)模拟试卷7 (总分:58.00,做题时间:90分钟) 一、选择题(总题数:29,分数:58.00) 1.下列关于函数模板的描述中,正确的是( )。 (分数:2.00) A.函数模板是一个实例函数 B.使用函数模板定义的函数没有返回类型 C.函数模板的类型参数与函数的参数相同 D.通过使用不同的类型参数,可以从函数模板得到不同的实例函数√ 解析:解析:函数模板是一系列相关函数的模型或样板,这些函数的源代码相同,只是所针对的数据类型不同。数据类型成了函数模板的参数,所以函数模板是一种参数化类型的函数。 2.有如下函数模板定义: template<typename T1,Typename T2> T1 Fun(T2 n){ return n*5.0;} 若要求以int型数据9作为函数实参调用该模板,并返回一个double型数据,则该调用应表示为( )。 (分数:2.00) A.FUN(9) B.FUN<9> C.FUN<double>[9] √ D.FUN<9>(double) 解析:解析:根据函数模板的定义,在选项C的调用中,把double类型传递给T1,int型传递给T2。 3.下列关于模板的描述中,错误的是( )。 (分数:2.00) A.类模板的成员函数都是模板函数 B.函数模板是一种参数化类型的函数 C.满足一定条件时可以省略模板实参 D.模板形参只能由关键字typename声明√ 解析:解析:同一模板的声明和定义中,模板形参的名字不必相同。每个模板类型形参前面必须带上关键字typename/class,每个非类型形参前面必须带上类型名字。 4.已知主函数中通过如下语句序列实现对函数模板swap的调用: int a[10],b[10]; swap(a,b,10);下列对函数模板swap的声明中,会导致上述语句序列发生编译错误的是( )。 (分数:2.00) A.template<typename T> void swap(T a[],T b[],int size); B.template<typename T> void swap(int size,T a[],T b[]);√ C.template<typename T1,typename T2> void swap(T1 a[],T2 b[],int size}; D.template<class T1,class T2> void swap(T1 a[],T2 b[],int size); 解析:解析:由题目中函数swap(a,b,10)调用语句可知,在对函数模板swap的声明语句中,应将第一、二个参数设为数组变量,第三个参数为整型变量。 5.在定义函数模板或类模板时,开头的保留字是( )。 (分数:2.00) A.typename B.template √ C.class D.typedef 解析:解析:定义函数模板或类模板时,开头的保留字是template。 6.若有函数模板mySwap和一些变量定义如下:( )。template<class T>void mySwap(T x,T y);double d1,d2;int i1,i2;下列对mySwap的调用中,错误的是 (分数:2.00) A.mySwap(i1,i2)
实验十_运算符重载
实验十运算符重载1.实验目的及要求 1)掌握运算符重载的基本概念和方法。 2)熟习几种特殊的运算符的重载。 2.实验内容 1.分析下面的程序,指出程序运行的结果: 1) #include class point{ int x,y; public: point(int vx,int vy){ x=vx; y=vy;} point(){x=0,y=0;} point operator+(point p1) { int px=x+p1.x; int py=y+p1.y; return point(px,py); } point operator-(point p1) { point p; int px=x-p1.x; int py=y-p1.y; return point(px,py); } void print(){cout<运行结果为: 30,30 Press any key to continue 2)分析下面程序,指出程序运行的结果: #include static int dys[]={31,28,31,30,31,30,31,31,30,31,30,31}; class date { int mo,da,yr; public: date(int m,int d,int y){mo=m;da=d;yr=y;} date(){} void disp() {cout<dys[dt.mo-1]) {day-=dys[dt.mo-1];//cout<Student类(友元,运算符重载,继承)综合题
//定义Student类,Date类,类定义与成员函数,实现分离。 //将Student类声明为Date的友元类。Student类需要提前声明。 //Student类的成员函数可以访问Date类的私有成员。 //成员函数:构造函数,构造函数重载,析构函数, //输出函数,求成绩最低者函数,排序函数。 //使用new,delete,动态分配内存。实现班级人数不固定,可以从键盘输入。 //定义Doctor类(研究生)-公共继承于Student类 //增加私有成员:string thesis(论文评价),int sci_value(科研分值) //增加相应的成员函数 //增加友元函数-运算符重载<<,>> //增加成员函数--按照科研分值高低排序 //student.h---头函数,类的定义 #include #include using namespace std; class Student; //提前声明 class Date //定义Date类-存放出生年月日 { friend class Student; //友元类,Student成员函数可以访问Date类的私有成员public: Date(); //无参构造函数 Date(int,int,int); //有参构造函数 ~Date(); //析构函数 //protected: //这里是保护成员//这里是VC6.0的原因 int year; //年 int month; //月 int day; //日 }; class Student //定义Student类-存放学生信息 { public: Student(); //无参构造函数 Student(string ,string ,char,Date,int); //有参构造函数 ~Student(); //析构函数 void display(); //输出函数 void input(); //输入函数 void min(Student*,int); //求最低成绩函数 void sort(Student*,int); //按照成绩高低排序函数 //protected: //这里是保护成员//这里是VC6.0的原因string num; //学号 string name; //姓名 char sex; //性别
实验十六运算符重载解读
实验十六运算符重载 一、实验目的 1、理解运算符重载作用和意义; 2、掌握类运算符和友元运算符重载的定义和使用; 3、掌握常用运算符(++、--、+、-、*、/、=、+=、-=、*=、/=、<<(插入)、>>(提取))的重载。 二、实验内容 1、下列程序定义了一个复数类,重载"+"运算符以实现复数的加法运算。 #include class Complex{ float Real,Image; //复数的实部和虚部 public: Complex(float r=0,float i=0) //初始化对象 { Real=r,Image=i; } float& AccessR() //存取实部 { return Real; } float& AccessI() //存取虚部 { return Image; } void Show() //显示复数 { cout<=0) cout<<"\t+"; else cout<<"\t"; cout<关系运算符重载实例2015
#include //using namespace std; class Date { private: int year; int month; int day; public: Date(){} Date(int y,int m,int d); void display(); friend bool operator >(Date &d1,Date &d2); friend bool operator <(Date &d1,Date &d2); friend bool operator ==(Date &d1,Date &d2); }; Date::Date(int y,int m,int d) { this->year=y; this->month=m; this->day=d; } void Date::display() { cout<year<<"-"<month<<"-"<day; } bool operator >(Date &d1,Date &d2) { if(d1.year>d2.year) return true; else if(d1.year==d2.year) { if(d1.month>d2.month) return true; else if(d1.month==d2.month) { if(d1.day>d2.day) return true; else return false; } else return false; } else
return false; } bool operator <(Date &d1,Date &d2) { if(d1.yeard2) cout<<"大于"; if(d1实验5 运算符重载
实验5 运算符重载 1.实验目的 通过本次实验 (1)理解运算符重载函数的概念; (2)掌握运算符重载函数的定义与使用方法; 2.实验要求 (1)编写实验程序 (2)在运行环境中,输入源程序 (3)编译运行源程序 (4)输入测试数据进行程序测试; (5)写出运行结果。 3.实验内容 (1)定义一个复数类,重载“-=”运算符,使这个运算符能直接完成复数的“-=”运算。分别用成员函数与友元函数编写运算符重载函数。在主函数中定义复数对象c1(10,20)、c2(15,30),进行c2-=c1的复数运算,并输出c1、c2的复数值。 (2)定义一个数组类Array,其私有数据成员为整型一维数组a[10]。通过构造函数给a[10]赋初值。用Show函数显示a[10]的元素值。用成员函数重载运算符“+”,直接实现两个一维数组对应元素相加的运算。在主函数中定义数组a、b分别为: int a[10]={1,2,3,4,5,6,7,8,9,10}; int b[10]={4,5,6,7,8,9,10,11,12,13}; 用Array定义三个数组对象arr1(a)、arr2(b)、arr3,执行arr3=arr1+arr2运算,输出arr3的数组元素值。 (3)定义一个人民币类Money,类中数据成员为元、角、分。用成员函数与友元函数重载“――”运算符,实现人民币对象的减1运算。在主函数中定义人民币对象m1=10元8角5分及对象m2、m3。对m1作前置“――”并赋给m2。对m1作后置“――”并赋给m3。显示m1、m2、m3的结果。 (4)定义描述字符串的类String,编写字符串运算符“+=”的重载函数,使运算符“+=”用于两个字符串联接操作,即用str1+=str2实现字符串函数strcat(str1,str2)的操作功能。要求分别用成员函数与友元函数编写运算符重载函数。在主函数中定义字符串对象s1("software and ")与s2("hardware"),进行s1+=s2的字符串联接,并输出s1、s2的值。
c++运算符重载习题
Task8-1 /* 1. 定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。将运算符函数重载为非成员、非友元的普通函数。编写程序,求两个复数之和*/ #include using namespace std; class Complex { public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} void display(); double real; double imag; }; void Complex::display() { cout<<"("<Task8-2 /*2. 定义一个复数类Complex,重载运算符“+”、”-“、”*”、”/”, 使之能用于复数的加、减、乘、除。运算符重载函数作为Complex类的成员函数,编程,分别求两个复数之和差积商。 */ #include using namespace std; class Complex {public: Complex(){real=0;imag=0;} Complex(double r,double i){real=r;imag=i;} Complex operator+(Complex &c2); Complex operator-(Complex &c2); Complex operator*(Complex &c2); Complex operator/(Complex &c2); void display(); private: double real; double imag; }; Complex Complex::operator +(Complex &c2) {Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; } Complex Complex::operator -(Complex &c2) {Complex c; c.real=real-c2.real; c.imag=imag-c2.imag; return c; } Complex Complex::operator *(Complex &c2) {Complex c; c.real=real*c2.real; c.imag=imag*c2.imag; return c;
运算符重载实验
运算符重载的应用 【实验目的】 1、理解重载运算符的意义。 2、掌握用成员函数、友元函数重载运算符的特点。 3、掌握重载运算符函数的调用方法。 【实验内容】 1.定义一个复数类,通过重载运算符:*,/,直接实现二个复数之间的乘除运算。编写 一个完整的程序,测试重载运算符的正确性。要求乘法“*”用友元函数实现重载,除法“/” 用成员函数实现重载。 ⑴分析 两复数相乘的计算公式为:(a+b i)*(c+d i)=(ac–bd )+(ad+bc) i 两复数相除的计算公式为:(a+b i)/(c+d i)=(ac+bd)/(c*c+d*d)+(bc-ad)/(c*c+d*d) i 复数类及运算符重载函数可定义为: 2.根据下面描述定义完整的日期类: class Date{ //成员变量 void IneDay();//日期增加1天 int DayCalc()const;//距基准日期的天数 static const int day[];//每月的天数 public: Date(int y,int m,int d); Date(int m, int d); Date(); void SystmDate();//读取系统当前时间 void SetDate(int yy,int mm,int dd);//设置日期 void SetDate(int mm,int dd); bool IsLeapYear(int yy) const;//是否闰年 bool IsEndofMonth()const ;//是否月末 //重载cout<<,cout>>完成读入和输出日期工作 //重载+,+=,-,-=,++,--,等运算符,完成日期的运算符操作。 //成员函数:判读一个日期是否是系统的当前日期
运算符重载题目
二、运算符重载(运算符重载的基本概念、运算符重载方法、运算符重载规则、特殊运算符重载和类型转换) 单选题10道: 1、假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为( B )。 A. AB operator+(AB& a,AB& b) B. AB operator+(AB& a) C. operator+(AB a) D. AB &operator+( ) 2、关于运算符重载,下面的叙述错误的是()。 A.运算符预定义的操作数个数不能改变 B.重载不能改变运算符的优先级顺序 C.参数的类型没有限制 D.尽量使其与原意保持一致 3、在一个类中可以对一个操作符进行(D )重载。 A. 1种 B. 2种以下 C. 3种以下 D. 多种 4、重载赋值操作符时,应声明为(C )函数。 A. 友元 B. 虚 C. 成员 D. 多态 5、要在类对象使用运算符,以下不必被重载的运算符是( A )。 A. [] B. = C. ++ D. -- 6、下列运算符中,不能重载的是(C ) A.new B.() C.::D.&& 7、在表达式x+y*z中,+ 是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是( A )。 A)operator+有两个参数,operator*有两个参数 B)operator+有两个参数,operator*有一个参数 C)operator+有一个参数,operator*有两个参数 D)operator+有一个参数,operator*有一个参数 8、友元运算符obj1>obj2被C++编译器解释为()。 A) operator>(obj1,obj2) B) >(obj1,obj2) C) obj1.operator>(obj2) D) obj2.operator>(obj1) 9、已知某个类的友元函数重载了+=和-,a,b,c是该类的对象,则“a+=b-c”被C++编译器解释为()。 A) operator+=(a,operator-(b,c)) B) a.operator+=(b.operator-(c)) C) operator+=(a,b.operator-(c)) D) a.operator+=(operator-(b,c)) 10、下列运算符中,必须使用成员函数进行重载的是()。 A) == B) = C) >> D) ++ 填空题10道: 1、多数运算符既能作为类的成员函数重载,也能作为类的非成员函数重载,但运算符“[]”只能作为类的函数重载。 2、加法运算符“+”和赋值运算符“=”都重载之后,“+=”也被重载了。 3、单目运算符作为类的成员函数重载时形参。 4、利用成员函数对二元运算符重载时,其右操作数为。 5、重载运算符函数的函数名由关键字引出。 6、运算符的重载归根结底是的重载。 7、后缀自增自减运算符定义时带有一个。
重载实例
一、为什么要重载操作符 1.操作符重载就是把操作符 比如+,-,*,/这些运算符赋于新的意义。 2.操作符重载的目的: C++有许多内置的数据类型,包括int,char,double等,每一种类型都有许多运算符,例如加+,减,乘,除等。当用户定义了类的对象时,两个对象之间是不能进行这些操作的,比如hyong类的对象a+b,这样的语句如果没有重载+运算符就会出错。但C++允许用户把这些运算符添加到自已的类中以方便类对象之间的运算就像内置类型的运算一样方便,比如对象a+b这样就很明白更容易懂,当然也可以在类中定义一个对象间相加的函数,比如 a.add(b)调用函数add()以实现两个对象a和b相加,但是这条语句没有比a+b更容易让人理解。 3.怎样实现操作符重载: 要实现操作符重载就要使用操作符重载函数,操作符重载函数用关见字operator实现,其形式为:反回类型 operator 操作符 (参数列表){}。操作符重载函数是一个函数,只不过这个函数的函数名为operator再加上后面要重载的操作符而已,比如要重载+号,则: hyong operator +(hyong m){}这就声明了一个反回类型为hyong的操作符函数,其函数名为operator + 4.作为类的成员和友元或者独立于类的区别 当操作符重载函数作为类的成员函数时,操作符重载函数的参数会比作为友元或者独立于类的操作符重载函数少一个参数,因为操作符重载类成员函数把调用该函数的第一个类的对象作为函数的第一个参数,也就是隐含的this指针指向调用该函数的第一个对象,所以会少一个参数。 5.调用操作符重载函数的方式: 5.1 调用类中的操作符重载函数的方法:当调用类中定义的操作符重载函数时最左边的对象是调用操作符重载函数的对象。比如在类hyong中重定义的+操作符 hyong operator +(hyong m){},有类hyong的对象m和n则调用操作符重载函数的方法有m+n和m.operator +(n),前一条语句会自动转换为后面这条语句,且m+n的表达式中最左边的对象是调用操作符重载函数的对象,而最右边
运算符重载实例
运算符重载 #include using namespace std; class Time{ public: Time(int newH,int newM,int newS); //有参构造 Time(){ //无参构造 hour=0; minute=0; second=0;} int getH(){return hour;}int getM(){return minute;} int getS(){return second;} void getslot(){cin>>hour>>minute>>second;} void getoldtime(){cin>>hour>>minute>>second;} void gettime() const; Time& operator+(); int hour,minute,second; }; Time::Time(int hour/*=0*/,int minute/*=0*/,int second/*=0*/){ if(0<=hour&&hour<24&&0<=minute&&minute<60&&0<=second&&second<60) {this->hour=hour; this->minute=minute; this->second=second; }else cout<<"Time error!"<>";Time timeslot;timeslot.getslot();cout<<"New time>>"; second=second+timeslot.second;if(second>=60){second-=60;minute=minute+1; if(minute>=60){minute-=60; hour=(hour+1)%24; }} minute=minute+timeslot.minute; if(minute>=60){minute-=60; hour=(hour+1)%24;} hour=hour+timeslot.hour;if(hour>=24){hour=(hour+1)%24; } return *this; } int main(){
C++实验六运算符重载
实验六运算符重载 一、实验目的 1.掌握运算符重载的概念; 2.握使用friend重载运算符的方法; 二、实验要求 1.独立完成程序的编辑、编译、调试及运行; 2.对于程序编译及运行中出现的错误,能够进行改正; 三、实验内容 1、重载加、减、乘、除运算符,实现复数类complex的四则运算。 程序分析: 程序中对于复数的四则运算——加,减,乘,除符号进行重载,采用的是成员函数的方法: Complex operator+(const Complex &c) Complex operator-(const Complex &c) Complex operator*(const Complex &c) Complex operator/(const Complex &c) 当c1+c2时,程序将运算符(+)认为是重载的复数加法运算符,因运算符的两个操作数都是复数,被解释为:c1.operator+(c2),其中,c1为第一操作数,作为调用重载运算符成员函数的对象,c2是第二操作数,作为重载运算符函数的实参,c1和c2都是类的Complex的对象。
#include class Complex { public: Complex() {real=imag=0;} Complex(double r) {real=r;imag=0;} Complex(double r,double i) {real=r;imag=i;} Complex operator + (const Complex &c); Complex operator - (const Complex &c); Complex operator * (const Complex &c); Complex operator / (const Complex &c); friend void Print(const Complex &c); private: double real,imag; }; Complex Complex::operator +(const Complex &c) { return Complex(real+c.real,imag+c.imag); } Complex Complex::operator -(const Complex &c) { return Complex(real-c.real,imag-c.imag); } Complex Complex::operator *(const Complex &c) { return Complex(real*c.real-imag*c.imag,real*c.imag+imag*c.real);
C++运算符重载讲解与经典实例 (2)
C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作。例如: class complex { public: complex(double r=0.0,double I=0.0){real=r;imag=I;} void display(); private: double real; double imag; }; complex a(10,20),b(5,8); “a+b”运算如何实现?这时候我们需要自己编写程序来说明“+”在作用于complex类对象时,该实现什么样的功能,这就是运算符重载。运算符重载是对已有的运算符赋予多重含义,使同一个运算符作用于不同类型的数据导致不同类型的行为。 运算符重载的实质是函数重载。在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型来确定需要调用达标函数,这个过程爱编译过程中完成。 一、运算符重载的规则 运算符重载规则如下: ①、C++中的运算符除了少数几个之外,全部可以重载,而且只能重载C++中已有的运算符。 ②、重载之后运算符的优先级和结合性都不会改变。 ③、运算符重载是针对新类型数据的实际需要,对原有运算符进行适当的改造。一般来说,重载的功能应当与原有功能相类似,不能改变原运算符的操作对象个数,同时至少要有一个操作对象是自定义类型。 不能重载的运算符只有五个,它们是:成员运算符“.”、指针运算符“*”、作用域运算符“::”、“sizeof”、条件运算符“?:”。 运算符重载形式有两种,重载为类的成员函数和重载为类的友元函数。 运算符重载为类的成员函数的一般语法形式为: 函数类型 operator 运算符(形参表) { 函数体; } 运算符重载为类的友元函数的一般语法形式为: friend 函数类型 operator 运算符(形参表) { 函数体; } 其中,函数类型就是运算结果类型;operator是定义运算符重载函数的关键字;运算符是重载的运算符名称。 当运算符重载为类的成员函数时,函数的参数个数比原来的操作个数要少一个;当重载为类
运算符重载综合实例
运算符重载综合实例 class MyComplex{ double Real;double Imag; public: //构造函数 MyComplex(const double &r=0.0,const double &i=0.0){Real=r;Imag=i;cout<<"Constructor !"<