C++友元函数重载"++"和"--"运算符

代码:

 1 #include <iostream>
 2 #include <cstring>
 3
 4 using namespace std;
 5
 6 class one{
 7     public:
 8         one(int i);
 9         void print();
10         friend one operator++(one&);
11         friend one operator++(one&,int);
12
13     private:
14         int i;
15 };
16
17 one::one(int I){
18     i = I;
19 }
20
21 void one::print(){
22     cout<<"i="<<i<<endl;
23 }
24
25 one operator++(one &op){
26     ++op.i;
27     return op;
28 }
29
30 one operator++(one &op,int){
31     one temp(op);
32     op.i++;
33     return temp;
34 }
35
36 int main(){
37     one obj1(1),obj2(100);
38     obj1.print();
39     (++obj1).print();//隐式调用
40     (obj1++).print();
41     obj1.print();
42
43     (operator++(obj2)).print();//显式调用
44     (operator++(obj2,1)).print();//此处的参数1可以取任意整数(int)
45     obj2.print();
46
47     return 0;
48 }

输出:

i=1
i=2
i=2
i=3
i=101
i=101
i=102

分析:

前缀方式和后缀方式重载函数不同,以参数int区分

时间: 2024-10-26 16:33:31

C++友元函数重载"++"和"--"运算符的相关文章

思考: 对于一个要重载的运算符而言,什么样的运算符应该用类成员函数重载,什么情况应该用友元函数重载??

还是用一个例子来说明吧 1 #define unsigned int UINT32 2 3 class RMB 4 { 5 public: 6 RMB(UINT32 d, UINT32 c); 7 friend RMB operator +(RMB&, RMB&); 8 friend RMB& operator ++(RMB&); 9 void display() 10 { 11 cout<<(yuan + jf / 100.0)<<endl; 12

从一个二级题来看成员函数重载运算符和友元函数重载运算符

先上题:下列运算符都可以被友元函数重载的是: A)=,+,-,\ B)[],+,(),new C)->,+,*,>> D)<<,>>,+,* 正确答案为D 我们知道,在运算符重载,友元函数运算符重载函数与成员运算符重载函数的区别是:友元函数没有this指针,而成员函数有,因此,在两个操作数的重载中友元函数有两个参数,而成员函数只有一个. 因此,我们可以总结如下: 1.对双目运算符而言,成员函数重载运算符的函数参数表中只有一个参数,而用友元函数重载运算符函数参数表中

C++重载(主要介绍使用友元函数重载)

重载限制 多数C++运算符都可以用下面的方式重载.重载的运算符不必是成员函数,但必须至少有一个操作数是用户自定义的类型.下面详细介绍C++对用户定义的运算符重载的限制. 1 重载后的运算符必须至少有一个操作数是用户自定义的类型,这将防止用户为标准类型重载运算符.因此,不能将减法运算符(-)重载为double值的和,而不是它们的差.虽然这种限制将对创造性有所影响,但可以确保程序正常运行. 2 使用运算符时不能违反运算符原来的句法规则.例如,不能将求模运算符(%)重载成使用一个操作数. 同样,不能修

初步理解[函数重载]和[运算符重载]&#183;转

作者:黄兢成链接:https://www.zhihu.com/question/23407045/answer/24543450来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 很多疑问都是想不通那东西具体用于什么地方. 比如我初学 C++ 时,早就知道指针实际就是某个变量的地址,就是不知道具体怎么用.这感觉就仿佛学数学,我知道某定理,也知道某定理的证明是对的,但我就是不知道这东西有什么用.直到学数据结构,接触到链表,才突然明白指针. 所以语法只是初步,更重要的是要

使用友元函数形式进行运算符重载

#include <iostream> using namespace std; class Complex { private:     int real;     int image; public:     Complex(int real=0,int image=0):real(real),image(image)     {         cout<<"Complex::Complex():"<<this<<endl;    

编写高质量代码——运算符重载,是成员函数还是友元函数

一.运算符重载的四项基本原则: ▍不可臆造运算符. ▍运算符原有操作数的个数.优先级和结合性不能改变. ▍操作数中至少一个是自定义类型. ▍保持运算符的自然含义. ============================== 二.运算符重载的两种形式: ▍成员函数形式(隐含一个参数 this 指针): 1)双目运算符:参数一个 2)单目运算符:不能显示的声明参数 ▍友元函数形式(不存在隐含的参数 this 指针) 1)双目运算符:两个参数 2)单目运算符:一个参数 ===============

运算符重载三种形式(成员函数,友元函数,普通函数)详解

首先,介绍三种重载方式: 1 //作为成员函数重载(常见) 2 class Person{ 3 Private: 4 string name; 5 int age; 6 public: 7 Person(const char* name, int age):name(name),age(age){} 8 bool operator<(const Person& b); 9 10 }; 11 bool Person::operator<(const Person& b) 12 {

C++——运算符的重载---以成员函数方式重载---以友元函数方式重载

一.运算符的重载 1.运算符的重载 允许把标准运算符(如+ - * /等运算符)应用于自定义数据类型的对象,可以提高程序的可读性,运算符的重载本质上还是函数重载.运算符仅仅是语法上的方便,它是另一种函数调用的方式,只有在设计涉及的代码更容易写,尤其是更容易读的时候才有必要重载. 2.实现运算符重载的方式 类的成员函数 友元函数(即类外的普通函数) 3.运算符重载的原则: 不能重载的运算符有5个:  .  .*  ?: ::  sizeof 运算符重载不允许发明新的运算符 不能改变运算符操作对象的

友元函数实现操作符重载的应用场景-友元函数实现左移右移操作符重载

先定义一个测试类Complex,其中用成员函数的方法重载了+.-.前置++.前置--.后置++.后置--这6个运算符,当然,这6个操作符也可以用友元函数方式重载,但习惯上这些都直接用成员函数方式重载. demo #include <iostream> using namespace std; class Complex { public: Complex(int a = 0, int b = 0) { this->a = a; this->b = b; } ~Complex();