修改下题中的复数类CComplex的定义,增加并实现*运算的重载。

2025-05-17 23:49:44
推荐回答(1个)
回答(1):

可以给类增加友员函数来解决,如
CComplex operator *(const CComplex &a, const CComplex &b)
{
return CComplex(a.r * b.r - a.i * b.i,a.r * b.i + a.i * b.r);
}
上面假定类中的成员变量为r,i,在类中增加友员函数申明:
friend CComplex operator *(const CComplex &a, const CComplex &b);

其实,一般不到万不得已不用友员,使用友员不是很好的一个设计方法,上面使用友员还要更改类定义,不用友员,则为:
CComplex operator *(const CComplex &a, const CComplex &b)
{
return CComplex(a.Real() * b.Real() - a.Image() * b.Image(),a.Real() * b.Image() + a.Image() * b.Real());
}
假设类中的成员函数Real(),Image()分别返回实部和虚部,一般都是内联!上面两个函数效率是一样的,但最后一个函数却不必更改原始类CComplex的定义。