+,-等运算符重载怎么用友元实现
书上说 +,-,*,/ 等双目运算符的重载最好定义为类的友元.我在自定义的complex类中试过可以,但在多项式类中却不行.
凡有friend CPol& operator+(const CPol&p1,const CPol& p2) 之处都出现Internal Compile Error.
而且我定义的
friend ostream &operator<<(ostream &os, const CPol &p)也无法访问p的私有成员
问题点数:0、回复次数:3Top
1 楼zhouqingyuan(浪帆)回复于 2003-12-02 20:14:15 得分 0
找一本C++书,看看书上的例子就知道你哪里出问题了。Top
2 楼smalltalk(老徐)回复于 2003-12-02 23:07:38 得分 0
只有在类定义里面需要加friend 说明。在类外该函数还要定义一次。但前面不要加friend就不会错了。Top
3 楼plainsong(短歌)()回复于 2003-12-03 00:50:28 得分 0
> 书上说 +,-,*,/ 等双目运算符的重载最好定义为类的友元.
事实上这种说法是不正确的,不管它是什么书上说的。
无论什么情况,友元都是能不用就不用。应该用成员来完成。
比如定义加法运算,你可以定义一个Add成员函数,它实现把自身加上另一个对象的功能;然后定义全局的+=操作符,调用Add实现;再全局定义+操作符,用+=实现。
当然你也可以把+=和+操作符都定义为成员操作符,但我一般习惯于在类定义中不定义操作符,只定义全局操作符。
同样,输入/输出操作符也可以这样作——它们都无法定义为你的类的成员,因为第一个参数是istream/ostream。为你的类定义input/output成员函数,实现输入/输出操作;然后定义全局操作符,调用input/output实现功能。Top




