VC6.0中重载操作符友元函数无法访问类的私有成员的解决办法
VC6.0中重载操作符友元函数无法访问类的私有成员的解决办法:
在C++中,操作符(运算符)可以被重载以改写其实际操作。
同时我们可以定义一个函数为类的友元函数(friend function)以便使得这个函数能够访问类的私有成员,这个定义通常在头文件中完成。
在Visual C++中定义一般的函数为友元函数通常是没有问题的。然而对某些重载操作符的函数,即使我们将它们定义为类的友元函数,VC的编译器仍然会显示出错信息,认为这些友元函数无权访问类的私有成员。我认为这应该是VC6.0编译器与标准C++不兼容的地方。
以下代码就是个例子:
// 头文件“Sample.h”
#include
using namespace std;
class Sample{
public:
Sample( );
friend ostream &operator<<(ostream &out, const Sample s);
friend istream &operator>>(istream &in, Sample & s);
private:
int x;
};
// 实现文件“Sample.cpp”
#include “Sample.h”
Sample::Sample( )
{
x=0;
}
istream &operator>>(istream &in, Sample & s)
{
cout<<”Please enter a value”< in >> s.x ; return in; } ostream &operator<<(ostream &out, const Sample s) { cout << s.x << endl; return out; } 以上代码在gnuc++中编译运行毫无问题。但是在VC++6.0中编译的时候就会出现以下的编 译错误: Compiling… Sample.cpp c:\temp\sample.cpp(8) : error C2248: ‘x’ : cannot access private member declared in class ‘Sample’ c:\temp\sample.h(19) : see declaration of ‘x’ c:\temp\sample.cpp(13) : error C2248: ‘x’ : cannot access private member declared in class ‘Sample’ c:\temp\sample.h(19) : see declaration of ‘x’ Error executing cl.exe.Sample.obj - 2 error(s), 0 warning(s) 在VC++ 6.0中解决这个问题有以下几种方法: 第一种方法:在头文件中类定义之前将类和友元操作符函数的原型特别声明一下,也就是将头文件修改如下(实现文件”Sample.cpp”不用作任何修改): // 修改后的头文件2 “Sample.h” #include using namespace std; // 以下3行代码为新加入 class Sample; ostream &operator<<(ostream &out, const Sample s); istream &operator>>(istream &in, Sample & s); class Sample { public: Sample( ); friend ostream &operator<<(ostream &out, const Sample s); friend istream &operator>>(istream &in, Sample & s); private: int x; }; 第二种方法:在头文件中实现作为友元函数的操作符函数的重载,也就是说在实现文件“Sample.cpp”中将函数重载的实现去掉,而将头文件修改如下: // 修改后的头文件1 “Sample.h” #include using namespace std; class Sample { public: Sample( ); friend ostream &operator<<(ostream &out, const Sample s); friend ostream &operator<<(ostream &out, const Sample s) { cout << s.x << endl; return out; } friend istream &operator>>(istream &in, Sample & s); friend istream &operator>>(istream &in, Sample & s) { cou t<<”Please enter a value”< in >> s.x ; return in; } private: int x; }; 第三种方法:是对I/O名空间的使用实行明确声明,也就是说在头文件”Sample.h”中直接写:#include using std::ostream; using std::istream …. 取代“using namespace std;” 注意:在这个例子里我们在实现文件“Sample.cpp”中包含“using namespace std;”这句话,否则在实现中就不能使用“cout”, “cin”, “<< “, “>>”和endl 这些关键字和符号。修改后的完整代码如下: // Sample.h #include using std::istream; using std::ostream; class Sample { public: Sample( ); friend ostream &operator<<(ostream &out, const Sample s); friend istream &operator>>(istream &in, Sample & s); private: int x; }; // “Sample.cpp” #include “Sample.h” using namespace std; Sample::Sample( ) { x=5; } istream &operator>>(istream &in, Sample & s) { cout<<”Please enter a value”< in >> s.x ; return in; } ostream &operator<<(ostream &out, const Sample s) { cout << s.x << endl; return out; } ++习题与解析-重载 时间:2010-05-19 12:13:47 来源:第二电脑网作者:第二电脑网 第二电脑网导读:t< 运算符重载 一.单项选择题 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.概念填空题 1.1运算符重载是对已有的运算符赋予多重含义,使同一个运算符在作用于不同类型对象时导致不同的行为。运算符重载的实质是函数重载,是类的多态性特征。 1.2可以定义一种特殊的类型转换函数,将类的对象转换成基本数据类型的数据。但是这种类型转换函数只能定义为一个类的成员函数而不能定义为类的友元函数。类类型转换函数既没有参数,也不显式给出返回类型。类类型函数中必须有return 表达式的语句返回函数值。一个类可以定义多个类类型转换函数。 1.3运算符重载时其函数名由operator运算符构成。成员函数重载双目运算符时,左操作数是对象,右操作数是函数参数。 2.简答题 2.2简述运算符重载的规则。 2.2简述重载单目运算符++、--,前置和后置时的差别。 2.3 C++中重运算符是否都可以重载?是否都可以重载成类的成员函数?是否都可以重载成类的友元函数? 2.4 构造函数作为类型转换函数的条件是什么。 3.选择题 3.1在下列运算符中,不能重载的是(B) A.! B. sizeof C. new D. delete 3.2 不能用友员函数重载的是(A)。 A.= B.== C.<= D.++ 3.3下列函数中,不能重载运算符的函数是(B)。 A.成员函数 B.构造函数 C.普通函数 D.友员函数 3.4如果表达式++i*k时中的”++”和”*”都是重载的友元运算符,则采用运算符函数调用格式,该表达式还可表示为(B)。 A.operator*(i.operator++(),k) B.operator*(operator++(i),k) C.i.operator++().operator*(k) D.k.operator*(operator++(i)) 3.5已知在一个类体中包含如下函数原型:VOLUME operator-(VOLUME)const;下列关于这个函数的叙述中,错误的是(B )。 A.这是运算符-的重载运算符函数 B.这个函数所重载的运算符是一个一元运算符 C.这是一个成员函数 D.这个函数不改变数据成员的值 3.6在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的运算符。下列叙述中正确的是(C )。 A.operator+有两个参数,operator*有两个参数 B.operator+有两个参数,operator*有一个参数 C.operator+有一个参数,operator*有两个参数 D.operator+有一个参数,operator*有一个参数 4.写出下列程序运行结果 4.1#include 例10.2中对运算符“+”进行了重载,使之能用于两个复数的相加。在该例中运算符重载函数operator+作为Complex类中的成员函数。 可能有的读者会提出这样的问题:”+“是双目运算符,为什么在例10.2程序中的重载函数中只有一个参数呢?实际上,运算符重载函数有两个参数,由于重载函数是Complex 类中的成员函数,有一个参数是隐含的,运算符函数是用this指针隐式地访问类对象的成员。可以看到,重载函数operator+访问了两个对象中的成员,一个是this指针指向的对象中的成员,一个是形参对象中的成员。如this->real+c2.real,this->real就是c1.real。 上节中已说明,在将运算符函数重载为成员函数后,如果出现含该运算符的表达式,如c1+c2,编译系统把它解释为: c1.operator+(c2) 即通过对象c1调用运算符重载函数,并以表达式中第二个参数(运算符右侧的类对象c2)作为函数实参。运算符重载函数的返回值是Complex类型,返回值是复数c1和c2之和(Complex(c1.real + c2.real, c1.imag+c2.imag))。 运算符重载函数除了可以作为类的成员函数外,还可以是非成员函数。可以将例10.2改写为例10.3。 [例10.3] 将运算符“+”重载为适用于复数加法,重载函数不作为成员函数,而放在类外,作为Complex类的友元函数。 .#include .// 注意,该程序在VC 6.0中编译出错,将以上两行替换为#include 第7章类与对象 7.1 类和对象 7.2成员函数的重载 1.成员函数重载的原则与普通函数重载的原则相同,即重载函数之间靠所包含的参数的类型或个数之间的差异进行区分。 2.成员函数的重载只是针对同一个类中的成员函数,对于不同类中的成员函数之间以及成员函数与不属于任何类的普通函数之间则不存在重载关系。因为它们属于不同的作用域,因此它们不仅函数名可以相同,而且它们的参数也可以完全一样。 例7.2.1成员函数的重载:处理一个数组构成的线性表,动态产生线性表,并输出线性表中的数据 #include 运算符重载复习题 1. 重载赋值操作符时,应声明为( ) A. 友元函数 B. 虚函数 C. 成员函数 D. 多态函数 2.关于重载的描述,正确的是( ) A.函数重载只能在成员函数之间进行 B.函数重载只能在全局函数之间进行 C.函数重载可以在基类和派生类之间进行 D.函数重载必须要求同名的函数的形参类型和个数都完全一致,返回值类型无所谓 3.下列运算符中不能重载的是( )。 A.∷(域运算符) B.+ (正) C.++ (自增) D.*(指针) 4. 派生类的对象对它的基类成员中() A. 公有继承的公有成员是可以访问的 B. 公有继承的私有成员是可以访问的 C. 公有继承的保护成员是可以访问的 D. 私有继承的公有成员是可以访问的 5 不能重载的运算符是() A. ?: B. [ ] C. new D. && 6. C++中不能重载的运算符是( ) A. new B. += C. sizeof D. && 7.重载函数是( ) A.以函数参数来区分,而不用函数的返回值来区分不同的函数 B.以函数的返回值来区分,而不用函数参数来区分不同的函数 C.参数表完全相同而返回值类型不同的两个或多个同名函数 D.参数表和返回值类型中至少有一个不同的两个或多个同名函数 8.对于运算符重载,说法正确的是( ) A.运算符如果被重载为非成员函数,那么对象就不能利用这个运算符重载函数进行操作 B.运算符重载函数可能既不是成员函数,也不是友元函数 C.用户每定义一个类,系统会自动提供一个赋值运算符重载函数,所以完全不 必考虑重载赋值运算符函数 D.一个类的虚函数不能调用运算符重载函数 9. C++中不能重载的运算符是( ) //定义Student类,Date类,类定义与成员函数,实现分离。 //将Student类声明为Date的友元类。Student类需要提前声明。 //Student类的成员函数可以访问Date类的私有成员。 //成员函数:构造函数,构造函数重载,析构函数, //输出函数,求成绩最低者函数,排序函数。 //使用new,delete,动态分配内存。实现班级人数不固定,可以从键盘输入。 //定义Doctor类(研究生)-公共继承于Student类 //增加私有成员:string thesis(论文评价),int sci_value(科研分值) //增加相应的成员函数 //增加友元函数-运算符重载<<,>> //增加成员函数--按照科研分值高低排序 //student.h---头函数,类的定义 #include 运算符重载就是对一个已有的运算符赋予新的含义,使之实现新功能。下面将通过简单的几个例程阐叙其用法。 例10.1 通过函数来实现复数相加。 #include int main( ) {Complex c1(3,4),c2(5,-10),c3; //定义3个复数对象c3=https://www.wendangku.net/doc/1a19062593.html,plex_add(c2); //调用复数相加函数cout<<″c1=″; c1.display( ); //输出c1的值cout<<″c2=″; c2.display( ); //输出c2的值 cout<<″c1+c2=″; c3.display( ); //输出c3的值 return 0; } 例10.2 改写例10.1,重载运算符“+”,使之能用于两个复数相加。#include 二、运算符重载(运算符重载的基本概念、运算符重载方法、运算符重载规则、特殊运算符重载和类型转换) 单选题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.实验目的 通过本次实验 (1)理解友元函数与运算符重载函数的概念; (2)学会友元函数的定义与使用方法; (3)掌握运算符重载函数的定义与使用方法; 2.实验要求 (1)编写实验程序 (2)在VC++运行环境中,输入源程序 (3)编译运行源程序 (4)输入测试数据进行程序测试; (5)写出运行结果。 3.实验内容 (1)定义一个复数类,重载“-=”运算符,使这个运算符能直接完成复数的“-=”运算。分别用成员函数与友元函数编写运算符重载函数。在主函数中定义复数对象c1(10,20)、c2(15,30),进行c2-=c1的复数运算,并输出c1、c2的复数值。 参考资料: (1)成员函数 # include ——每个现象后面都隐藏一个本质,关键在于我们是否去挖掘 写在前面: 函数重载的重要性不言而明,但是你知道C++中函数重载是如何实现的呢(虽然本文谈的是C ++中函数重载的实现,但我想其它语言也是类似的)?这个可以分解为下面两个问题 ?1、声明/定义重载函数时,是如何解决命名冲突的?(抛开函数重载不谈,using就是一种解决命名冲突的方法,解决命名冲突还有很多其它的方法,这里就不论述了)?2、当我们调用一个重载的函数时,又是如何去解析的?(即怎么知道调用的是哪个函数呢) 这两个问题是任何支持函数重载的语言都必须要解决的问题!带着这两个问题,我们开始本文的探讨。本文的主要内容如下: ?1、例子引入(现象) o什么是函数重载(what)? o为什么需要函数重载(why)? ?2、编译器如何解决命名冲突的? o函数重载为什么不考虑返回值类型 ?3、重载函数的调用匹配 o模凌两可的情况 ?4、编译器是如何解析重载函数调用的? o根据函数名确定候选函数集 o确定可用函数 o确定最佳匹配函数 ?5、总结 1、例子引入(现象) 1.1、什么是函数重载(what)? 函数重载是指在同一作用域内,可以有一组具有相同函数名,不同参数列表的函数,这组函数被称为重载函数。重载函数通常用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。 When two or more different declarations are specified for a single name in the same scope, that name is said to overloaded. By extension, two declaration s in the same scope that declare the same name but with different types are called overloaded declarations. Only function declarations can be overloaded; o bject and type declarations cannot be overloaded. ——摘自《ANSI C++ Standar d. P290》在线代理|网页代理|代理网页|https://www.wendangku.net/doc/1a19062593.html, Task8-1 /* 1. 定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。将运算符函数重载为非成员、非友元的普通函数。编写程序,求两个复数之和*/ #include /*2. 定义一个复数类Complex,重载运算符“+”、”-“、”*”、”/”, 使之能用于复数的加、减、乘、除。运算符重载函数作为Complex类的成员函数,编程,分别求两个复数之和差积商。 */ #include C运算符重载函数作为类成员函数和友元函数 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】 C++运算符重载的方法 运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。也就是说,运算符重载是通过定义函数实现的。运算符重载实质上是函数的重载。重载运算符的函数一般格式如下:函 (形参表列){ 前两个运算符不能重载是为了保证访问成员的功能不能被改变,域运算符和sizeof 运算符的运算对象是类型而不是变量或一般表达式,不具备重载的特征。 C++运算符重载函数作为类成员函数和友元函数 例中对运算符“+”进行了重载,使之能用于两个复数的相加。在该例中运算符重载函数operator+作为Complex类中的成员函数。 可能有的读者会提出这样的问题:”+“是双目运算符,为什么在例程序中的重载函数中只有一个参数呢?实际上,运算符重载函数有两个参数,由于重载函数是Complex类中的成员函数,有一个参数是隐含的,运算符函数是用this指针隐式地访问类对象的成员。可以看到,重载函数operator+访问了两个对象中的成员,一个是this指针指向的对象中的成员,一个是形参对象中的成员。如this->real+,this->real就是。上节中已说明,在将运算符函数重载为成员函数后,如果出现含该运算符的表达式,如c1+c2,编译系统把它解释为: +(c2) 即通过对象c1调用运算符重载函数,并以表达式中第二个参数(运算符右侧的类对象c2)作为函数实参。运算符重载函数的返回值是Complex类型,返回值是复数c1和c2之和(Complex+, +)。 运算符重载函数除了可以作为类的成员函数外,还可以是非成员函数。可以将例改写为例。 . 《面向对象程序设计》习题 班级:学号:姓名:名单序号:成绩: 第7章运算符重载和多态性 一、选择题(共30分,每题1分) 1.下列运算符中,()运算符在C++中不能重载。 A.?: B.[] C. new D.++ 2.友元重载运算符obj1>obj2被C++编译器解释为()。 A.operator >(obj1,obj2) B.>(obj1,obj2) C.obj2.operator >(obj1) D.obj1.operator >(obj2) 3.重载赋值操作符时,应声明为()函数。 A.友元B.虚C.成员D.多态 4.在重载一个运算符时,其参数表中没有任何参数,这表明该运算符是()。 A. 作为友元函数重载的1元运算符 B. 作为成员函数重载的1元运算符 C. 作为友元函数重载的2元运算符 D. 作为成员函数重载的2元运算符5.在重载一运算符时,若运算符函数的形参表中没有参数,则不可能的情况是()。 A. 该运算符是一个单目运算符。 B. 该运算符函数有一个隐含的参数this。 C. 该运算符函数是类的成员函数。 D. 该运算符函数是类的友元函数。 6. 关于运输符重载,下列表述中正确的是()。 A.C++已有的任何运算符都可以重载 B.运算符函数的返回类型不能声明为基本数据类型 . C.在类型转换符函数的定义中不需要声明返回类型 D.可以通过运算符重载来创建C++中原来没有的运算符 7. C ++流中重载的运算符>>是一个()。 A. 用于输出操作的非成员函数 B. 用于输出操作的成员函数 C. 用于输入操作的非成员函数 D. 用于输入操作的成员函数 8. 若要对Data类中重载的加法运算符成员函数进行声明,下列选项中正确的是()。 A. Data +(Data); B. Data operator+(Data); C. Data +operator(Data); D. operator +(Data, Data); 9. 下列运算符中哪些是不能够被重载的()。 A. .,.*,sizeof,::,?: B. ++,--,new,= = C. new,delete,>=,[ ] D. +,-,=,delete 10. 在名为BigNumber类的类体中对运算符函数double进行如下声明: operator double(BigNumbe); 函数声明中有一个明显的错误,这个错误就是()。 A.参数表中不应该有任何参数 B.缺少对函数返回类型的说明 C.参数声明中缺少参数变量 D.函数声明中缺少函数体 11. 下列关于运算符重载的描述中,正确的是()。 A. 运算符重载成为成员函数时,若参数表中无参数,重载是一元运算符 B. 一元运算符只能作为成员函数重载 C. 二元运算符重载成为非成员函数时,参数表中有一个参数 VC6.0中重载操作符友元函数无法访问类的私有成员的解决办法 VC6.0中重载操作符友元函数无法访问类的私有成员的解决办法: 在C++中,操作符(运算符)可以被重载以改写其实际操作。 同时我们可以定义一个函数为类的友元函数(friend function)以便使得这个函数能够访问类的私有成员,这个定义通常在头文件中完成。 在Visual C++中定义一般的函数为友元函数通常是没有问题的。然而对某些重载操作符的函数,即使我们将它们定义为类的友元函数,VC的编译器仍然会显示出错信息,认为这些友元函数无权访问类的私有成员。我认为这应该是VC6.0编译器与标准C++不兼容的地方。 以下代码就是个例子: // 头文件“Sample.h” #include 【例6.4】用友元函数重载运算符实现两字符串加法。 #include static char* str; String operator+(const String& a,const String& b) { strcpy(str,https://www.wendangku.net/doc/1a19062593.html,); strcat(str,https://www.wendangku.net/doc/1a19062593.html,); return String(str); } void main() { str=new char[256]; String demo1("Visual c++"); String demo2(" 6.0"); demo1.display(); demo2.display(); String demo3=demo1+demo2; demo3.display(); String demo4=demo3+" Programming."; demo4.display(); String demo5="Programming."+demo4; demo5.display(); delete str; } 程序的运行结果为: The string is :Visual c++ The string is : 6.0 The string is :Visual c++ 6.0 The string is :Visual c++ 6.0 Programming. The string is :Programming.Visual c++ 6.0 Programming. //////////////////////////////////////////////////////// //////////////////////////////////////////////////////// //// /////////// //// 主题:负号运算符成员函数重载/////////// //// /////////// //// 作者:波斯顿律师/////////// //// //////////// //// 日期:02/10/2012 //////////// //// /////////// //////////////////////////////////////////////////////// //////////////////////////////////////////////////////// #include 【例6.1】用成员函数重载运算符一 #include RMB RMB::operator +(RMB& s) // 定义运算符函数 { unsigned int c = jf + s.jf; unsigned int d = yuan + s.yuan; RMB result(d,c); // 创建RMB对象result return result; } RMB& RMB::operator++() // 定义运算符函数 { jf ++; if(jf >= 100){ jf -= 100; yuan++; } return *this; // 返回当前对象 } void main() { RMB d1(1, 60); RMB d2(2, 50); RMB d3(0, 0); d3 = d1 + d2; // 调用重载运算符函数operator +,使RMB类的两个对象可以相加 ++d3; // 调用重载运算符函数operator ++,使RMB类的对象d3可以自增 d3.display(); } 程序的运行结果为: 4.11函数重载习题与解析
运算符重载练习题.
c 运算符的重载习题答案
10.5C++运算符重载函数作为类成员函数和友元函
C++教程第07章 类与对象-2成员函数的重载
第十章 运算符重载 复习题
Student类(友元,运算符重载,继承)综合题
C++运算符重载例程详解
运算符重载题目
实验8--友元函数与运算符重载函数
C++函数重载
c++运算符重载习题
C运算符重载函数作为类成员函数和友元函数
运算符重载知识题
VC6.0中重载操作符友元函数无法访问类的私有成员的解决办法
【例6.4】用友元函数重载运算符实现两字符串加法
负号运算符成员函数重载
【例6.1】用成员函数重载运算符一