读书人

操作符重载的小疑点

发布时间: 2012-03-06 20:47:55 作者: rapoo

操作符重载的小问题
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!!!)?


[解决办法]

探讨
这里a不是对象么?又不是成员函数,怎么能访问私有成员呢?

[解决办法]
你做访问时,发生的域是属于RationalNumber的,那么被访问的私有成员也是属于RationalNumber的。因此发生访问的域有权限访问目标域的私有成员。这是基于域的访问控制。
有些语言并不能,是基于对象的。就如同你最早的理解。

读书人网 >C++

热点推荐