加法运算符重载为从成员函数执行过程

今天学习了运算符重载函数,测试了复数类加减运算符的重载,不明白运算符重载函数的执行过程,重点探究一下:

首先贴出源代码

// example_1_2_cl_dt_fushujiajian.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include<iostream>
using namespace std;

class complex
{
public:
    complex(double r=0.0,double i=0.0){real=r;imag=i;cout<<"构造函数被调用..."<<"real="<<r<<"  imag="<<i<<endl;};
    complex operator+(complex c2);
    complex operator-(complex c3);
    void display();
private:
    double real;
    double imag;
};
complex complex::operator +(complex c2)//函数实现的时候没有写complex::    是类的实现函数形式还是不清楚呀!!
{
    cout<<"复数+被调用..."<<endl;
    cout<<"("<<real<<","<<imag<<")"<<endl;
    cout<<"c2=("<<c2.real<<","<<c2.imag<<")"<<endl;
    return complex(real+c2.real,imag+c2.imag);
    cout<<"复数+调用结束..."<<endl;

}
complex complex::operator-(complex c3)//函数实现的时候写成了complex::complex operator -的形式,还是类的实现函数形式不清楚呀!!
{
    cout<<"复数-被调用..."<<endl;
    cout<<"("<<real<<","<<imag<<")"<<endl;
    cout<<"c3=("<<c3.real<<","<<c3.imag<<")"<<endl;
    //complex c4;
    //c4=c3;
    //cout<<"新对象的值("<<real<<","<<imag<<")"<<endl;
    return complex(real-c3.real,imag-c3.imag);
    cout<<"复数-调用结束..."<<endl;
}
void complex::display()
{
    
    cout<<"("<<real<<","<<imag<<")"<<endl;
    cout<<"显示函数被调用..."<<endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
    complex c1(5,4),c2(2,10),c3;
    cout<<"c1=";c1.display();//此处出错没写c1.   这就是类使用的太少,不会用呀!!
    cout<<"c2=";c2.display();//此处出错没写c1.   这就是类使用的太少,不会用呀!!
    c3=c1-c2;
    cout<<"c3=c1-c2=";
    c3.display();
    c3=c1+c2;
    cout<<"c3=c1+c2=";
    c3.display();



    system("pause");
    return 0;
}

运行结果:

不理解的部分:

   c3=c1-c2;

 

这行代码是如何执行的过程怎样??c1和c2 是如何被调用的?

分析后得知:

c3=c1-c2;

可以理解为“c3”表示返回值,类型就是c3本身的类型,"c1-"整体可以理解为调用c1这个对象内部的”complex operator-(complex c3);“函数,

”c1-c2“整体理解为以“c2”做为”complex operator-(complex c3)“这个函数的参数并且执行”complex operator-(complex c3)“这个函数的内容;

”c3=c1-c2“理解为把这个函数的返回值赋值给c3.这个赋值过程就相当于给c3这个类初始化,因此会再次调用构造函数。理解结束!!不知道对否,欢迎指正!!

 

转载于:https://www.cnblogs.com/20150705-yilushangyouni-Jacksu/p/4707762.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值