操作符重载的小问题
RationalNumber RationalNumber::operator-(RationalNumber a)
{
int i;
int common,minCommonMultiple;
common = a.maxCommonFactor(a.Denominator,Denominator);
minCommonMultiple = a.Denominator * Denominator / common;
a.Molecular = minCommonMultiple / a.Denominator * a.Molecular;
a.Denominator = minCommonMultiple;
Molecular = minCommonMultiple / Denominator * Molecular;
Denominator = minCommonMultiple;
Molecular = Molecular-a.Molecular;
if (Molecular > 0 &&(i = maxCommonFactor(Denominator,Molecular)) != 1)//化简分数
{
Denominator /= i;
Molecular /= i;
}
return *this;
}
这里定义了一个RationalNumber的对象a。为什么a可以直接访问私有成员Denominator和Molecular??
同时,这个函数是重载了“-“进行分数间的减法,为什么减出来的结果不正确呢(1/2 - 2/4 = 1/2!!!)?
[解决办法]
[解决办法]
你做访问时,发生的域是属于RationalNumber的,那么被访问的私有成员也是属于RationalNumber的。因此发生访问的域有权限访问目标域的私有成员。这是基于域的访问控制。
有些语言并不能,是基于对象的。就如同你最早的理解。