C++运算符重载为成员函数

#include<iostream>
using namespace std;

class Complex{
public:
    Complex(double r=0.0,double i=0.0):real(r),imag(i){}
    Complex operator + (const Complex &c2) const;
    Complex operator - (const Complex &c2) const;
    void display() const;
private:
    double real,imag;
};

void Complex::display() const{
    cout<<"("<<real<<","<<imag<<")"<<endl;
}

Complex Complex::operator + (const Complex &c2) const{
    return Complex(real+c2.real,imag+c2.imag);//调用Complex构造函数创建一个临时对象并返回它
                                              //Complex c(real+c2.real,imag+c2.imag);
                                              //return c;
}

Complex Complex::operator - (const Complex &c2) const{
    return Complex(real-c2.real,imag-c2.imag);
}

int main(){
    Complex c1(5,4),c2(2,10),c3;
    cout<<"c1=";c1.display();
    cout<<"c2=";c2.display();
    c3=c1-c2;
    cout<<"c2=c1-c2=";c3.display();
    c3=c1+c2;
    cout<<"c2=c1+c2=";c3.display();
    return 0;
}
时间: 2024-08-08 05:08:15

C++运算符重载为成员函数的相关文章

运算符重载为成员函数

运算符重载实质上就是通过函数重载,重载为成员函数,它就可以自由的访问本类的数据成员,实际使用时,总是通过该类的某个对象来访问重载的运算符.如果是双目运算符,左操作数是对象本身的数据,由this指针指出,就不再需要任何参数.下面分别介绍这两种情况. 对于双目运算符B,如果要重载为类的成员函数,使之能够实现表达式oprd1 B oprd2,其中oprd1为A类的对象,则应当把B重载为A类的成员函数,该函数只有一个形参,形参的类型是oprd2所属的类型.经过重载之后,表达式就相当于函数调用orpd.o

C++运算符重载(成员函数方式)

一.运算符重载 C++中预定义的运算符的操作对象只能是基本数据类型,实际上,对于很多用户自定义类型,也需要有类似的运算操作.如果将C++中这些现存的运算符直接作用于用户自定义的类型数据上,会得到什么样的结果呢?编译器无法给出正常的结果,因为我们需要运算符重载,给运算符赋予多重含义,使同一个运算符作用于不同类型的数据导致不同类型的行为,增强了运算符的普适性. 运算符重载的实质是函数重载.在实现过程中,首先把指定的运算表达式转化为对运算符函数的调用,运算对象转化为运算符函数的实参,然后根据实参的类型

C++运算符重载(友元函数方式)

我们知道,C++中的运算符重载有两种形式:①重载为类的成员函数(见C++运算符重载(成员函数方式)),②重载为类的友元函数. 当重载友元函数时,将没有隐含的参数this指针.这样,对双目运算符,友元函数有2个参数,对单目运算符,友元函数有一个参数.但是,有些运行符不能重载为友元函数,它们是:=,(),[]和->. 重载为友元函数的运算符重载函数的定义格式如下: [cpp] view plaincopy 一.程序实例 [cpp] view plaincopy 1 //运算符重载:友元函数方式 2

C++运算符重载为友元函数学习笔记

初探C++运算符重载学习笔记 在上面那篇博客中,写了将运算符重载为普通函数或类的成员函数这两种情况. 下面的两种情况发生,则我们需要将运算符重载为类的友元函数 <1>成员函数不能满足要求 <2>普通函数又不能访问类的私有成员时 举例说明: class Complex{ double real, imag; public: Complex(double r, double i):real(r), imag(i){ }; Complex operator+(double r); };

对运算符重载和友元函数的例子

以下是博主在学习完运算符重载和友元函数后编写的一个例子,实现一个复数的基本运算.定义的头文件: /****************************************************************** complex.h Defination of the complex ******************************************************************/ #ifndef _complex_ #define _com

重载运算符:类成员函数or友元函数

类成员函数: bool operator ==(const point &a)const { return x==a.x; } 友元函数: friend bool operator ==(const point &a,const point &b) { return a.x==b.x; } 两种重载方式的比较: (1)单目运算符.=.().[].->使用类成员函数,其它双目运算符使用友元函数 (2)类型转换函数只能定义为类成员函数 (3)运算会修改类成员是使用类成员函数 (4

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

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

运算符重载为友元函数,或者普通函数

重载为友元函数时,一般先在类内用friend关键字声明,然后在类外具体实现(具体实现时不需friend,也不需类名) 重载为普通函数时,直接在类外给出函数实现即可(也不需要类名): 二者的区别在于友元函数对类的数据成员有直接获取权限,而普通函数还要通过类的接口访问数据成员. 还有一种是运算符重载为类的成员函数.同友元类似,成员也有直接访问私有数据成员的权限. 那么什么时候重载为成员,什么时候重载为友元呢?

第八周(运算符重载)一般函数

/* *copyright(c) 2015,烟台大学计算机学院 *All rights reserved. *文件名称:第八周(运算符重载) *作者:王忠 *完成日期:2015.4.28 *版本号:v1.0 * *问题描述:请用类的成员函数,定义复数类重载运算符+.-.*./,使之能用于复数的加减乘除 *输入描述: *程序输出: #include <iostream> using namespace std; class Complex { public: Complex(){real=0;i