关于运算符重载的疑问
如下面的例子:
#include<iostream>
using namespace std;
class complex //复数类声明
{
public: //外部接口
complex(double r=0.0,double i=0.0){real=r;imag=i;} //构造函数
complex operator + (complex c2); //+重载为成员函数
complex operator - (complex c2); //-重载为成员函数
void display(); //输出复数
private: //私有数据成员
double real; //复数实部
double imag; //复数虚部
};
complex complex::operator +(complex c2) //重载函数实现
{
complex c;
c.real=c2.real+real;
c.imag=c2.imag+imag;
return complex(c.real,c.imag);
}
complex complex::operator -(complex c2) //重载函数实现
{
complex c;
c.real=real-c2.real;
c.imag=imag-c2.imag;
return complex(c.real,c.imag);
}
void complex::display()
{ cout<<"("<<real<<","<<imag<<")"<<endl; }
int main() //主函数
{ complex c1(5,4),c2(2,10),c3; //声明复数类的对象
cout<<"c1="; c1.display();
cout<<"c2="; c2.display();
c3=c1-c2; //使用重载运算符完成复数减法
cout<<"c3=c1-c2=";
c3.display();
c3=c1+c2; //使用重载运算符完成复数加法
cout<<"c3=c1+c2=";
c3.display();
return 0;
}
上面的代码在VC6下编译通过并能够运行。
我的问题是,为什么在重载的时候能够直接访问对象的私有成员变量?
#include<iostream>
using namespace std;
class complex //复数类声明
{
public: //外部接口
complex(double r=0.0,double i=0.0){real=r;imag=i;} //构造函数
complex operator + (complex c2); //+重载为成员函数
complex operator - (complex c2); //-重载为成员函数
void display(); //输出复数
private: //私有数据成员
double real; //复数实部
double imag; //复数虚部
};
complex complex::operator +(complex c2) //重载函数实现
{
complex c;
c.real=c2.real+real;
c.imag=c2.imag+imag;
return complex(c.real,c.imag);
}
complex complex::operator -(complex c2) //重载函数实现
{
complex c;
c.real=real-c2.real;
c.imag=imag-c2.imag;
return complex(c.real,c.imag);
}
void complex::display()
{ cout<<"("<<real<<","<<imag<<")"<<endl; }
int main() //主函数
{ complex c1(5,4),c2(2,10),c3; //声明复数类的对象
cout<<"c1="; c1.display();
cout<<"c2="; c2.display();
c3=c1-c2; //使用重载运算符完成复数减法
cout<<"c3=c1-c2=";
c3.display();
c3=c1+c2; //使用重载运算符完成复数加法
cout<<"c3=c1+c2=";
c3.display();
return 0;
}
上面的代码在VC6下编译通过并能够运行。
我的问题是,为什么在重载的时候能够直接访问对象的私有成员变量?
...全文
相关推荐
有符号-大整形-计算器
有符号大整形计算器,可以扩展,利用重载运算符写的。郑重承诺,没有bug。有疑问欢迎联系;谢谢啦~^_^
swift中自定义正则表达式运算符=~详解
如果有疑问大家可以留言交流,谢谢大家对我们的支持。
c++练习题word文档
这些题目涵盖了C++的基本概念,如函数、运算符重载、内存管理、流类和文件操作,以及数组和指针的使用。通过深入理解和解答这些问题,学生可以增强对C++核心概念的理解。
详解C++ 重载运算符和重载函数
C++ 重载运算符和重载函数是编程中的一种高级特性,它允许开发者在同一个作用域内为相同名称的操作提供多种实现方式,从而增加代码的灵活性和表达力。这两种重载主要涉及到函数和运算符的多态性应用。1.
C++运算符重载规则详解
首先,C++中大部分运算符都可以被重载,包括算术运算符、比较运算符、逻辑运算符等。但有五个运算符不允许被重载:成员访问运算符`.`、成员指针访问运算符`.


