c++语言友元函数和成员函数对运算符重载

#include<iostream>
using namespace std;
/******************************************/
/*use member function to overload operator*/
/******************************************/
class RMB{
public:
    RMB(unsigned int d, unsigned int c);
    RMB operator + (RMB&);
    RMB& operator ++();
    void display(){
        cout <<"use member function overload operator"<<(yuan+jf/100.0) << endl;
    }
protected:
    unsigned int yuan;
    unsigned int jf;
};
RMB::RMB(unsigned int d, unsigned int c){
    yuan = d;
    jf = c;
    while (jf >= 100){
        yuan++;
        jf -= 100;
    }
}
RMB RMB::operator + (RMB& s){
    unsigned int c = jf + s.jf;
    unsigned int d = yuan + s.yuan;
    RMB result(d, c);
    return result;
}

RMB& RMB::operator ++(){
    jf++;
    if (jf >= 100){
        jf -= 100;
        yuan++;
    }
    return *this;
}
/******************************************/
/*use friend function to overload operator*/
/******************************************/
class RMBf{
public:
    RMBf(unsigned int b, unsigned int a);
    friend RMBf operator+(RMBf&, RMBf&);  //two operands  while member function use just one operand
    friend RMBf& operator++(RMBf&);       //one operands  while member function use no operand
    void display(){ cout <<"use friend function to overload operator"<<(yuan+jf/100.0) << endl; }
protected:
    unsigned int yuan;
    unsigned int jf;
};
RMBf::RMBf(unsigned int b, unsigned int a){
    yuan = b;
    jf = a;
    while (jf >= 100){
        yuan++;
        jf -= 100;
    }
}
RMBf operator + (RMBf& s1, RMBf& s2){  //needn‘t class name::operator name, more simple
    unsigned int c = s1.jf + s2.jf;
    unsigned int d = s1.yuan + s2.yuan;
    RMBf result(d, c);
    return result;
}

RMBf& operator ++(RMBf& s){
    s.jf++;
    if (s.jf >= 100){
        s.jf -= 100;
        s.yuan++;
    }
    return s;
}
void main(){
    RMB d1(1, 60);
    RMB d2(2, 50);
    RMB d3(0, 0);
    d3 = d1 + d2;
    ++d3;
    d3.display();

    RMBf f1(1, 60);
    RMBf f2(2, 50);
    RMBf f3(0, 0);
    f3 = f1 + f2;
    ++f3;
    f3.display();
    int i;
    cin >> i;
}

c++语言友元函数和成员函数对运算符重载

时间: 2024-10-09 12:59:32

c++语言友元函数和成员函数对运算符重载的相关文章

golang写业务代码,用全局函数还是成员函数

在golang中,函数划分为全局函数和成员函数,在使用的时候,有种情况,会产生一些疑惑的,就是在写业务代码的时候,使用全局函数好像会比较方便,一般业务代码,都不会复用,都是针对特定的业务进行编程,要复用的代码都会封装为功能函数了.在写业务代码的时候,使用包+全局函数的划分方式,可以将业务代码写成单例,把receive也省略掉了,简单清晰. 使用包+全局函数的方式来划分模块,很多项目在写业务代码的时候,都是这样操作的,但这样会增加目录的层次,看起来会比较啰嗦. 因为使用包划分代码,业务代码使用的变

bind()适配器(Adapter) -- 调用全局函数及成员函数

调用全局函数 调用全局函数程序实例: #include <iostream> #include <algorithm> #include <functional> #include <locale> #include <string> using namespace std; using namespace std::placeholders; char my_toupper(char c) { locale loc; return std::u

C++静态成员函数,静态成员变量,运算符重载

当一个函数不属于某个具体的实例而属于整个类,那么这个函数最好写成静态成员函数,这样就可以直接用类名调用 Class::Func() 对于一般成员函数当用obj.Func()调用函数时,编译器会将其编译成TypeOf(obj)::Func()的样式,所以静态成员函数不能这么调用 友元函数和静态成员函数都不属于类,调用时都不会传入this,所以不可以使用 只让本类对象共享数据,让成员变量声明为static,静态数据成员的初始化要放在外面,class::name = value;因为其属于类,所以分配

面向对象,全局函数和成员函数之间的转换

class A{private: int a; int b;public: A(int a, int b) {  this->a = a;  this->b = b; } A Test(A &aa) {  A temp = A(this->a + aa.a, this->b + aa.b);  cout << temp.a << "b:" << temp.b << endl;  return temp; }

【C/C++学院】(8)全局函数和类成员函数转化/友元/操作符重载

1.全局函数和类成员函数转化 全局函数和成员函数的相互转化:只需要修改一个指向本类的this指针: #include <iostream> using namespace std; class Test { public: Test(int a, int b) { this->a = a; this->b = b; } //成员函数 Test &Gadd2(Test &t2) { this->a = this->a + t2.a; this->b

C++ Primer 学习笔记_26_操作符重载与转换(1)--可重载/不可重载的操作符、成员函数方式重载、友元函数方式重载

C++ Primer 学习笔记_26_操作符重载与转换(1)--可重载/不可重载的操作符.成员函数方式重载.友元函数方式重载 引言: 明智地使用操作符重载可以使类类型的使用像内置类型一样直观! 一.重载的操作符名 像任何其他函数一样,操作符重载函数有一个返回值和一个形参表.形参表必须具有操作符数目相同的形参.比如赋值时二元运算,所以该操作符函数有两个参数:第一个形参对应着左操作数,第二个形参对应右操作数. 大多数操作符可以定义为成员函数或非成员函数.当操作符为成员函数时,它的第一个操作数隐式绑定

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

还是用一个例子来说明吧 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

const成员函数,内联函数,友元函数,static成员

原文链接:https://blog.csdn.net/qq_38646470/article/details/79795538专栏链接:https://blog.csdn.net/column/details/20026.html[TOC]#1.const成员函数const修饰成员函数在成员函数后面加const,const修饰this指针所指向的对象,也就是保证调用这个const成员函数的对象在函数内不会被改变. class Date { public : void Display () { c

关于声明、定义、前向声明、include、循环依赖、普通友元函数、友元类、友元成员函数的总结

做<C++ Primer>(第5版)253页练习题7.3.4有感,故总结之 1 声明 1.1 变量和函数的声明 常见的声明是声明一个变量或函数,一般在头文件.h中声明,例如: pos cursor = 0; // 给定初始值 char get(pos r, pos col) const; 1.2 类的声明 对于一个类,一般是直接在头文件中直接写 class ClassName { ... },这称之为类的定义,然后在类体{...}中又声明或定义了成员变量和成员函数.类的声明是没有类体,只有个类