4 运算符重载【VIP专享】

合集下载

第四章运算符重载

第四章运算符重载

4.1.6 重载赋值运算符
一、概述 1、“=”赋值运算符可以被重载; 赋值运算符可以被重载; 2、重载后不能被继承; 重载后不能被继承; 3、必须重载为成员函数。 必须重载为成员函数。 二、格式: 格式: X X :: operator=(const X from) { //复制X的成员; //复制 的成员; 复制X } 三、一般来说当缺省的类赋值函数不能正确工作时,考虑“=”的重载。 一般来说当缺省的类赋值函数不能正确工作时,考虑“ 的重载。
operatorα operatorα(objX) αobjX 或: objX α()
所需要的一个 操作数在参数 表中,由对象 显式地提供。
三、二元运算符 1、需要两个操作数; 需要两个操作数; 2、对于任意二元运算符β: 对于任意二元运算符β
方 式
定义
Type X::operator β(X obj) { … } Type operator β( X ojb) { … }
第四章
运算符重载
问题的提出
1、基本数据类型系统提供了大量运算符。 基本数据类型系统提供了大量运算符。 如:int x,y; x=x+y; 表达简洁,使用方便。 表达简洁,使用方便。 2、问题的提出: 问题的提出: 对于串类的对象合并: 对于串类的对象合并: string x, y; strcat(x,y);不如上述运算那样简单, strcat(x,y);不如上述运算那样简单,希望能改 不如上述运算那样简单 造为:x=x+y;更加简单和直观 更加简单和直观! 造为:x=x+y;更加简单和直观! 因此,需要对“+”进行不同的解释 进行不同的解释, 因此,需要对“+”进行不同的解释,即:重载
要重载的运算符 符号

第04章 运算符重载

第04章 运算符重载
算符被重载后其原有的功能仍然保留已有算符的作用范载使之能用于载载象算符重载和载载合起可以在程序中定载出有载用意载而使用方便的新的据载型最吸引人的特点之一?43重载中载大部分的算符允载重载43重载不能重载的算符只有算符不能重载是载了保载载载成载的功能不能被改载两个运参数个数不能全部是参数以防止用载修改用于载准载型intoperatorint不合法43returnab
class A { int i; public: A(int a=0){ i=a;} void Show(void) {cout<<"i="<<i<<endl;} void AddA(A &a, A &b) // 利用函数进行类之间的运算 { i=a.i+b.i; } A operator +(A &a) // 重载运算符+ { A t; t.i=i+a.i; return t; } }; void main(void) { A a1(10),a2(20),a3; 相当于a3=a1.operator+(a2) a1.Show (); a2.Show (); a3=a1+a2; //重新解释了加法,可以直接进行类的运算 a3.AddA(a1,a2); //调用专门的功能函数 a3.Show (); }
总结:
重新定义运算符,由左操作符
调用右操作符。最后将函数返
回值赋给运算结果的对象。
由对象c1调用
若已有运算载Complex operator+ (Complex &c1, Complex &c2) ,那下面的表达式还 合法吗 c3=c2+12; // 这个表达式合法吗? int i=3+5; //这个表达式合法吗?

第4讲 运算符重载(上)

第4讲 运算符重载(上)
10
重载函数作为类的友元函数
11
小结
C++规定,有的运算符(如赋值运算符、下标运算符、 C++规定,有的运算符(如赋值运算符、下标运算符、函数 规定 调用运算符)必须定义为类的成员函数, 调用运算符)必须定义为类的成员函数,有的运算符则不能 定义为类的成员函数(如流插入“<<” 定义为类的成员函数(如流插入“<<”和流提取运算符 >>” 类型转换运算符) “>>”、类型转换运算符) 一般将单目运算符重载为成员函数, 一般将单目运算符重载为成员函数,将双目运算符重载为 友元函数 说明: 有的C++编译系统( C++编译系统 6.0)没有完全实 说明: 有的C++编译系统(如Visual C++ 6.0)没有完全实 C++标准 它所提供不带后缀. 标准, 现C++标准,它所提供不带后缀.h的头文件不支持把成员函 数重载为友元函数。但是Visual C++所提供的老形式的带 数重载为友元函数。但是Visual C++所提供的老形式的带 后缀. 后缀.h的头文件可以支持此项功能
第4讲 运算符重载
4.1 运算符重载概念 4.2 重载运算符的规则
1
4.1 运算符重载概念
重载概念:用户根据自己需要对C++已提供的运算符 或函数的功能重新赋予新的含义,使之“一词多义”
函数重载:同一函数名可以实现不同的功能 运算符重载:同一运算符能实现不同的运算操作
2
生活中的重载概念
“杯具”一词重 杯具” 载
12
本讲重点
重载的概念:“双肩挑” 重载的方法: 重载的方法:运算符重载是通过定义函 数实现的 重载的规则:7+1

第十八章运算符重载-PPT精选文档

第十八章运算符重载-PPT精选文档

运算符重载的实质
• 运算符重载是对已有的运算符赋予多 重含义。 • 实现机制
– 运算符重载的实质就是函数重载:每个 运算符对应各自的运算符函数,根据操 作数的不同调用不同的同名函数。 – 将指定的运算表达式转化为对运算符函 数的调用,运算对象转化为运算符函数 的实参。
10
规则和限制
• 编译系统对重载运算符的选择,遵循函数重载的 选择原则。 – 可以重载C++中除下列运算符外的所有运算符: . .* .> :: ?: – 只能重载C++语言中已有的运算符,不可臆造 新的。 – 不改变原运算符的优先级和结合性。 – 不能改变操作数个数。 – 经重载的运算符,其操作数中至少应该有一个 是自定义类的对象或是对类的对象的引用。
11
运算符重载的两种形式
• 重载为类的友元函数:
– friend 类型 operator 运算符(形参表) { 函数体 } • 重载为类的成员函数:
– 类型 operator 运算符(形参表)
{ 函数体 }
12
如何重载运算符 • 运算符是在C++系统内部定义的,具有特 定语法规则,如参数说明,运算顺序, 优先级等。重载运算符时,要注意该重 载运算符的运算顺序和优先级不变
• 多态性的实现:
– 函数重载 – 虚函数 – 运算符重载
• 在基本类型上,系统提供了许多预定义 的运算符(如+、-、*、/)。
4
问题举例——ห้องสมุดไป่ตู้数的运算
class complex //复数类声明 { public: complex(double r=0.0,double i=0.0){real=r;imag=i;} void display(); //显示复数的值 private: double real; double imag; };

vc 04 运算符重载

vc 04 运算符重载

于是: 于是:
string x,y; x=x+y; //表示串 和串 合并,放入串 表示串x 表示串 和串y 合并,放入串x
这就使对基本类型的预定义运算符" 的含义在串类中被扩展 这就使对基本类型的预定义运算符"+"的含义在串类中被扩展 为对串类对象的合并操作,即运算符"+"被重载. 为对串类对象的合并操作,即运算符" 被重载. 被重载 运算符重载应注意的几个问题: 运算符重载应注意的几个问题: 1,哪些运算符可以重载? 哪些运算符可以重载? 中除了下面四种运算符外, 在C++ 中除了下面四种运算符外,系统预定义的运算符都 能被重载. 能被重载.
string x,y;
那么, 实现两个串的合并. 那么,可以使用函数strcat(x,y)实现两个串的合并. 如果在表示字符串的类对象x, 的特定环境下,运算符" 使 如果在表示字符串的类对象 ,y 的特定环境下,运算符"+"使 用于类对象,能被解释为串对象x 的合并, 用于类对象,能被解释为串对象 和y 的合并,则编程就更方便 了.
例如:下边是运算符重载的另一个例子,程序实现了复数的加 例如:下边是运算符重载的另一个例子, 和减运算. 和减运算.
#include <iostream.h> class Complex { public: Complex() { real=imag=0.0; } Complex(double r) { real=r; imag=0.0; } Complex(double r,double i) { real=r; imag=i; } Complex operator+(const Complex& c); Complex operator-(const Complex& c); friend void print(const Complex& c); private: double real,imag; };

第4章运算符重载

第4章运算符重载
6
C++语言程序设计
int main( ) { Complex c1(3,4),c2(5,-10),c3;
c3=plex_add(c2); //调用复数相加函数
cout<<"c1="; c1.display(); cout<<"c2="; c2.display(); cout<<"c1+c2="; c3.display(); return 0; }
24
C++语言程序设计
(1)先建立一个String类:见C4-4-1(VC++).CPP #include <iostream> using namespace std; Class String //String 是用户自己指定的类名 {public:
String( ){ p=NULL; } //默认构造函数 String( char *str ); //构造函数 void display( ); private: char *p; //字符型指针,用于指向字符串 };
1、掌握运算符重载的基础知识。 2、掌握运算符重载函数为类成员函数及友元函数
的方法。 3、熟悉不同类型数据间的转换。
【重点】
运算符重载的方法;运算符重载函数作为类成员 函数;运算符重载函数作为友元函数;单目运算符 重载;不同类型数据之间的转换。
【难点】
单目运算符重载函数;不同类型数据间的转换。
2
C++语言程序设计
重载函数operator+是作为Complex类中的
成员函数的。
由于重载函数是Complex类中的成员

【免费下载】第8章 运算符重载

【免费下载】第8章 运算符重载
#include "iostream.h" struct complex {
complex(double re=0.0,double im=0.0,char ch1='U' ); complex operator+(complex& c);//声明重载加法操作 void show(); private: double real,imag; char ch; }; complex::complex(double re,double im,char ch1 ) { real=re;imag=im;ch=ch1; cout<<"constructor is called!"<<endl; } complex complex::operator+(complex& c)
{ //定义重载加法操作,扩充加法操作的语义 double x,y; if(ch==c.ch){ x=real+c.real;y=imag+c.imag; return complex(x,y,ch); } else cout<<"can't execute the plus opetating!"<<endl; return complex(0,0,'U');
1
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电,力根保通据护过生高管产中线工资敷艺料设高试技中卷术资配,料置不试技仅卷术可要是以求指解,机决对组吊电在顶气进层设行配备继置进电不行保规空护范载高与中带资负料荷试下卷高总问中体题资配,料置而试时且卷,可调需保控要障试在各验最类;大管对限路设度习备内题进来到行确位调保。整机在使组管其高路在中敷正资设常料过工试程况卷中下安,与全要过,加度并强工且看作尽护下可关都能于可地管以缩路正小高常故中工障资作高料;中试对资卷于料连继试接电卷管保破口护坏处进范理行围高整,中核或资对者料定对试值某卷,些弯审异扁核常度与高固校中定对资盒图料位纸试置,.卷编保工写护况复层进杂防行设腐自备跨动与接处装地理置线,高弯尤中曲其资半要料径避试标免卷高错调等误试,高方要中案求资,技料编术试5写交卷、重底保电要。护气设管装设备线置备4高敷动调、中设作试电资技,高气料术并中课3试中且资件、卷包拒料中管试含绝试调路验线动卷试敷方槽作技设案、,术技以管来术及架避系等免统多不启项必动方要方式高案,中;为资对解料整决试套高卷启中突动语然过文停程电机中气。高课因中件此资中,料管电试壁力卷薄高电、中气接资设口料备不试进严卷行等保调问护试题装工,置作合调并理试且利技进用术行管,过线要关敷求运设电行技力高术保中。护资线装料缆置试敷做卷设到技原准术则确指:灵导在活。分。对线对于盒于调处差试,动过当保程不护中同装高电置中压高资回中料路资试交料卷叉试技时卷术,调问应试题采技,用术作金是为属指调隔发试板电人进机员行一,隔变需开压要处器在理组事;在前同发掌一生握线内图槽部纸内故资,障料强时、电,设回需备路要制须进造同行厂时外家切部出断电具习源高题高中电中资源资料,料试线试卷缆卷试敷切验设除报完从告毕而与,采相要用关进高技行中术检资资查料料和试,检卷并测主且处要了理保解。护现装场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

4第四章 运算符重载

4第四章 运算符重载
1 2 3
const complex operator - (const complex &c) const; void display(); //输出复数 private: //私有数据成员 1.是为了堵塞a+b=c的漏洞。 double real; //复数实部 2. 3.是为了扩大适应性。 double imag; //复数虚部 };
17
[ ]运算符重载为成员函数
下标运算符[]可以重载: 重载形式为:operator[](int); 当 X x; 隐含调用。 x[y] 可被解释为: 显式调用。 x. operator [ ](y); 只能重载为成员函数,不能使用友元函数。 这个类显然是个‚数组类‛。
18
前置++和后置++重载为成员函数
9
使用
void main(){
complex c1(5,4),c2(2,10),c3; //三个复数类的对象 cout<<"c1="; cout<<"c2="; c1.display(); c2.display();
c3=c1-c2; //使用重载运算符完成复数减法 cout<<"c3=c1-c2="; c3.display(); 程序输出结果为:
这三个运算符是许多 教课书没有提到的。
唯一的一个三目运 算符不能重载。
3
运算符重载的基础
设计运算符重载函数,首先要了解运算符原本的运算语义。重
载函数要忠实遵守该运算符作用于基本数据类型时的语义,
并表现出自身所特有的性质。 例如:+ 、+= 、=、++(前)、++(后) ....
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

r.b=b+x;
return r;
{ B x(3,5), y(8,4), z1, z2;
}
z1=x+5;
z2=10+y; //B
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,通系电1,力过根保管据护线生高0不产中仅工资2艺料22高试2可中卷以资配解料置决试技吊卷术顶要是层求指配,机置对组不电在规气进范设行高备继中进电资行保料空护试载高卷与中问带资题负料2荷试2,下卷而高总且中体可资配保料置障试时2卷,32调需3各控要类试在管验最路;大习对限题设度到备内位进来。行确在调保管整机路使组敷其高设在中过正资程常料1工试中况卷,下安要与全加过,强度并看工且25作尽52下可22都能护可地1关以缩于正小管常故路工障高作高中;中资对资料于料试继试卷电卷连保破接护坏管进范口行围处整,理核或高对者中定对资值某料,些试审异卷核常弯与高扁校中度对资固图料定纸试盒,卷位编工置写况.复进保杂行护设自层备动防与处腐装理跨置,接高尤地中其线资要弯料避曲试免半卷错径调误标试高方中等案资,,料要编试求5写、卷技重电保术要气护交设设装底备备置。4高调、动管中试电作线资高气,敷料中课并设3试资件且、技卷料中拒管术试试调绝路中验卷试动敷包方技作设含案术,技线以来术槽及避、系免管统不架启必等动要多方高项案中方;资式对料,整试为套卷解启突决动然高过停中程机语中。文高因电中此气资,课料电件试力中卷高管电中壁气资薄设料、备试接进卷口行保不调护严试装等工置问作调题并试,且技合进术理行,利过要用关求管运电线行力敷高保设中护技资装术料置。试做线卷到缆技准敷术确设指灵原导活则。。:对对在于于分调差线试动盒过保处程护,中装当高置不中高同资中电料资压试料回卷试路技卷交术调叉问试时题技,,术应作是采为指用调发金试电属人机隔员一板,变进需压行要器隔在组开事在处前发理掌生;握内同图部一纸故线资障槽料时内、,设需强备要电制进回造行路厂外须家部同出电时具源切高高断中中习资资题料料电试试源卷卷,试切线验除缆报从敷告而设与采完相用毕关高,技中要术资进资料行料试检,卷查并主和且要检了保测解护处现装理场置。设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
C、.
C、int
B、friend B operator+(int x);
D、friend B operator+(B b, B a);
//A
D、%
D、float
A、A 行有错误
C、A 行和 B 行都有错误
8、下列叙述正确的是( )。
class B
{ int a,b;
};
public:
B(int aa=0, int bb=0) { a=aa; b=bb; }
C、friend B operator+(B b);
7、下列叙述正确的是( )。
class B
{ int a,b;
};
public:
void main( )
B(int aa=0, int bb=0) { a=aa; b=bb; }
B operator+ ( int x )
{ B r;
}
r.a=a+x;
B、?:
B、运算符重载函数既可以是一个成员函数,也可以是友元函数
C、运算符重载函数只能是一个非成员函数
D、运算符重载函数只能是友元函数
4、下列叙述不正确的是( )。
A、利用成员函数重载二元运算符时,参数表中的参数必须为两个
运算符重载习题
B、利用成员函数重载二元运算符时,成员函数的 this 指针所指向的对象作为运算符的左
一、选择题
1、下面关于运算符重载的说法中,错误的是( )。
A、可以对 C保持固有的结合性和优先级顺序
C、运算符重载不能改变操作数的个数
D、在运算符函数中,不能使用缺省的参数值
2、下列运算符能被重载的是( )。
A、::
3、下列叙述正确的是( )。
A、运算符重载函数只能是一个成员函数
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,通系电1,力过根保管据护线生高0不产中仅工资2艺料22高试2可中卷以资配解料置决试技吊卷术顶要是层求指配,机置对组不电在规气进范设行高备继中进电资行保料空护试载高卷与中问带资题负料2荷试2,下卷而高总且中体可资配保料置障试时2卷,32调需3各控要类试在管验最路;大习对限题设度到备内位进来。行确在调保管整机路使组敷其高设在中过正资程常料1工试中况卷,下安要与全加过,强度并看工且25作尽52下可22都能护可地1关以缩于正小管常故路工障高作高中;中资对资料于料试继试卷电卷连保破接护坏管进范口行围处整,理核或高对者中定对资值某料,些试审异卷核常弯与高扁校中度对资固图料定纸试盒,卷位编工置写况.复进保杂行护设自层备动防与处腐装理跨置,接高尤地中其线资要弯料避曲试免半卷错径调误标试高方中等案资,,料要编试求5写、卷技重电保术要气护交设设装底备备置。4高调、动管中试电作线资高气,敷料中课并设3试资件且、技卷料中拒管术试试调绝路中验卷试动敷包方技作设含案术,技线以来术槽及避、系免管统不架启必等动要多方高项案中方;资式对料,整试为套卷解启突决动然高过停中程机语中。文高因电中此气资,课料电件试力中卷高管电中壁气资薄设料、备试接进卷口行保不调护严试装等工置问作调题并试,且技合进术理行,利过要用关求管运电线行力敷高保设中护技资装术料置。试做线卷到缆技准敷术确设指灵原导活则。。:对对在于于分调差线试动盒过保处程护,中装当高置不中高同资中电料资压试料回卷试路技卷交术调叉问试时题技,,术应作是采为指用调发金试电属人机隔员一板,变进需压行要器隔在组开事在处前发理掌生;握内同图部一纸故线资障槽料时内、,设需强备要电制进回造行路厂外须家部同出电时具源切高高断中中习资资题料料电试试源卷卷,试切线验除缆报从敷告而设与采完相用毕关高,技中要术资进资料行料试检,卷查并主和且要检了保测解护处现装理场置。设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。
class point { int a,b;
public: point( int aa, int bb ) { a=aa; b=bb; } void operator +=(point &p) { a+=p.a; b+=p.b; } void show( ) { cout<<a<<’\t’<<b; }
friend void operator++( );
void show( ) { cout<<a<<’\n’<<b; }
friend void operator++( )
{…}
A、A 行有错误
C、A 行和 B 行都有错误
B、B 行有错误
二、填空题 1、运算符有两种实现方法,一种是通过友元函数来实现,另一种通过( 类成员 ) 函数来实现。 2、下列程序的运行结果是( )。11 9
操作数
C、利用成员函数重载二元运算符时,参数表中的参数作为此运算符的右操作数
D、运算符重载时不能改变运算符的语法结构
5、为了区分一元运算符的前缀和后缀运算,在后缀运算符进行重载时,额外添加一个参数,
其类型是( )。
A、void
B、char
6、下列能正确重载运算符的友元函数原型是( )。
A、friend B operator?: ( );
}; void main( ) { point p1(3,5), p2(8,4);
p1+=p2; p1.show( ); } 3、下列程序的运行结果是( )。 class S { int n; public:
S(int i) {n=i; } operator ++( ) { n+=5; } operator++(int) { n+=2; } void show( ) { cout<<n<<’\n’; } }; void main( ) { S A(5), B(5);
相关文档
最新文档