成员函数和友元函数 完成二元和一元运算符重载(进阶1)

原创 2016年08月13日 23:02:26

二元运算符重载:

全局函数:

#include <iostream>
using namespace std;

class Complex{//复数类
private:
    int a;
    int b;
    friend Complex operator + (Complex &, Complex &);//注意声明友元函数
public:
    Complex(int a = 0, int b = 0){
        this->a = a;
        this->b = b;
    }
    void print(){
        cout << "a: " << a  << " " << "b: " << b << endl;
    }
};

Complex operator + (Complex &a1, Complex &a2){
    Complex tmp(a1.a + a2.a, a1.b + a2.b);
    return tmp;
}

int main()
{
    Complex c1(1, 2), c2(3, 4), c3;
    c3 = c1 + c2;
    c3.print();
    return 0;
}
类中:

#include <iostream>
using namespace std;

class Complex{//复数类
private:
    int a;
    int b;
public:
    Complex(int a = 0, int b = 0){
        this->a = a;
        this->b = b;
    }
    void print(){
        cout << "a: " << a  << " " << "b: " << b << endl;
    }
    Complex operator - (Complex &a2){
        Complex tmp(this->a - a2.a, this->b - a2.b);
        return tmp;
    }
};

int main()
{
    Complex c1(1, 2), c2(3, 4), c3;
    c3 = c1 - c2;
    c3.print();
    c3 = c2 - c1;
    c3.print();
    return 0;
}

一元运算符重载(难于二元)

类中和全局函数写在一块儿了

#include <iostream>
using namespace std;

class Complex{//复数类
private:
    int a;
    int b;
    friend Complex operator ++ (Complex &);
    friend Complex operator ++ (Complex &, int);
public:
    Complex(int a = 0, int b = 0){
        this->a = a;
        this->b = b;
    }
    void print(){
        cout << "a: " << a  << " " << "b: " << b << endl;
    }
    Complex operator -- (){ //前置--操作符,成员函数方法实现
        this->a --;
        this->b --;
        return (*this);
    }
    Complex operator --(int){ //后置--操作符,成员函数方法实现
        Complex tmp = (*this);
        this->a --;
        this->b --;
        return tmp;
    }
};

Complex operator ++ (Complex &A){ //前置++操作符,用全局函数实现
    A.a ++;
    A.b ++;
    return A;
}

Complex operator ++ (Complex &A, int){//后置++操作符,全局函数实现     加一个占位符跟前置加以区分
    Complex tmp = A;
    A.a ++;
    A.b ++;
    return tmp;
}

int main()
{
    Complex c1(1, 2);

    //前置++操作符,用全局函数实现
    ++c1;          //Complex c = operator ++ (c1);
    c1.print();

    //前置--操作符,成员函数方法实现
    --c1;          //Complex c = c1.operator -- (&c1)
    c1.print();

    //后置++操作符,全局函数实现
    c1++;          //Complex c = operator ++ (c1, 0);
    c1.print();
    
    //后置--操作符,成员函数方法实现
    c1--;          //Complex c = c1.operator -- (0);
    c1.print();

    return 0;
}






版权声明:本文为博主原创文章,如能转载,不胜荣幸。

相关文章推荐

项目1-2 请用类的友元函数,而不是成员函数,再次完成上面提及的运算符的重载;

12

第八周任务1:方案二:请用类的友元函数,而不是成员函数,完成上面提及的运算符的重载;

//2)方案二:请用类的友元函数,而不是成员函数,完成上面提及的运算符的重载; #include using namespace std; class Complex ...

C++运算符重载 成员函数与友元函数

#include using namespace std; class A {     int x,y;     public:     A(int xx,int yy):x(xx),...

C++运算符重载形式——成员函数or友元函数

运算符重载是C++多态的重要实现手段之一。通过运算符重载对运算符功能进行特殊定制,使其支持特定类型对象的运算,执行特定的功能,增强C++的扩展功能。 运算符重载的我们需要坚持四项基本原则:  (1)不...

C++实现输入输出运算符重载、友元函数和成员函数实现复数类Complex

题目要求如下: 1) 基本的构造函数; 2) 成员运算符+、-实现复数的加减运算; 3) 友元运算符+、-实现更合理的加减运算; 4) 运算符实现复数类的输出输入。...

用类的友元函数,而不是成员函数定义复数类重载运算符+、-、*、/,使之能用于复数的加减乘除

/* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作 者:郭辉 *完成时间:2016年5月23日 *版...

运算符重载函数作为类成员函数和友元函数

可以看到,重载函数operator+访问了两个对象中的成员,一个是this指针指向的对象中的成员,一个是形参对象中的成员。如this->real+c2.real,this->real就是c1.real...

运算符重载函数作为类成员函数与友元函数的区别

运算符重载函数作为类成员函数与友元函数

从零开始学C++之运算符重载(一):以成员函数方式重载、以友元函数方式重载

一、运算符重载 运算符重载允许把标准运算符(如+、—、*、/、等)应用于自定义数据类型的对象 直观自然,可以提高程序的可读性 体现了C++的可扩充性 运算符重载仅仅只是语法上的方便,它是另一种函数...

成员函数重载运算符和友元函数重载运算符的比较

http://blog.163.com/arthur0808@126/blog/static/17120709720109163859518/ 1.对双目运算符而言,成员函数重载运算符的函数参数表中...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:成员函数和友元函数 完成二元和一元运算符重载(进阶1)
举报原因:
原因补充:

(最多只允许输入30个字)