首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

操作符重载的小疑点

2012-03-06 
操作符重载的小问题RationalNumber RationalNumber::operator-(RationalNumber a){int iint common,minCo

操作符重载的小问题
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的。因此发生访问的域有权限访问目标域的私有成员。这是基于域的访问控制。
有些语言并不能,是基于对象的。就如同你最早的理解。

热点排行