2013-09-30 80 views
1

我正在编写一个基本的类程序,我已经完成了所有运算符重载,现在我想尝试重载所有的运算符。我也会尝试+,==,!=和< <但是现在我对乘法感到困惑。*运算符重载

  1. 在测试驱动程序中,用户输入一个因子。我在课堂上定义了这个因子,但不知道如何从驱动程序中给它赋值。有任何帮助?

  2. 在运算符重载函数中,我想将该因子乘以对象。 - >该对象有五个组件,它是一个数字列表。总和,长度,平均值,最小值和最大值。用一个常数乘以一个对象的目的是产生一个与第一个相同的类,除了列表中的每个数字已经乘以因子。为了达到这个目的,所有需要做的事情就是将总和乘以系数,将新的总和除以旧的长度以得到新的平均值,然后将最小值和最大值乘以因子。

这里是我的过载至今:

Statistician Statistician::operator* (Statistician& temp) 
{ 
    Statistician Stat3; 

    Stat3.newLength = temp.newLength; 
    Stat3.newSum = (factor * temp.newSum); 
    Stat3.newMean = (temp.newSum/temp.newLength); 
    Stat3.newMaximum = (factor * temp.newMaximum); 
    Stat3.newMinimum = (factor * temp.newMinimum); 

    return Stat3; 
} 

这里还有什么是在测试驱动程序:

system("CLS"); 
cout << endl << " Multiply by factor of: "; 
cin >> // Input factor 
Stat3 = Stat1 * factor; 

最后,我在类中定义的 “因子”,在“私人“ - 让我知道如果这是错误的。

+0

你得到什么错误?在你的例子中,除非Factor是Statistician类型的变量,否则你将会遇到编译器错误。运算符重载中的参数是表达式右侧的对象,IE Stat1 *因子等同于Stat1.operator *(factor);. – IllusiveBrian

回答

1

你通常不希望修改你申请operator*的对象,因此它的签名是

Statistician Statistician::operator* (const Statistician& temp) const; 

:如果你打电话Stat1*factor*thisStat1tempfactor。也就是说,你可能想要考虑实施operator*=并根据这个定义operator*。有些图书馆可以帮助你,看到我的个人资料的一些链接。

如果你想实现operator*=,其签名会

Statistician& Statistician::operator*= (const Statistician& value); 

,如果factor可能是一些其他类型的,你可以重载该类型,例如:

Statistician& Statistician::operator*= (const int value); 

到允许按整数值缩放Statistician的实例。后者似乎比在类中存储一些因子更合适,但没有看到更多的代码就很难说清楚。

下面是一个operator*=(const int factor)一个建议:

Statistician& Statistician::operator*= (const int factor) 
{ 
    newSum *= factor; 
    newMean = newSum/newLength; 
    newMaximum *= factor; 
    newMinimum *= factor; 
    return *this; 
} 

,你可以看到,事情通常变得更容易,因此更不容易出错,如果你做的正确途径。

既然你可以直接调用operator*=,就不需要在你的类中存储一个因子,并且类本身变得更容易。最后,你可以定义operator*作为一个自由函数类之外:

Statistician operator* (const Statistician& lhs, const int factor) 
{ 
    Statistician result(lhs); // make a copy 
    result *= factor; 
    return result; 
} 

或只使用库来产生operator*你。

+0

谢谢一堆。我成功地实现了* = ...做了更多的研究,发现重载*是罕见的,对我而言是不必要的。 谢谢你的帮助! -Rachel – 404Cat