如何使泛型重载运算符<
我写了这段代码,但显然有错误-缺少类型说明符-假定为int。注意:C ++不支持default-int。
class b{
private:
int i;
public:
b(){}
b(const int& ii):i(ii){}
friend ostream& operator<<(ostream& o,const t& obj);//Error here
};
class a:public b{
private:
int i;
int x;
public:
a(){}
a(const int& ii,const int& xx):i(ii),x(xx){}
friend ostream& operator<<(ostream& o,const t& obj);//Error here
};
template<class t>
ostream& operator<<(ostream& o,const t& obj){
o<<obj.i;
return o;
}
int main()
{
b b1(9);
a a1(8,6);
cout<<a1<<endl<<b1;
_getch();
}
在这里可以做什么?
编辑:更改“ int i”为私人会员
回答:
朋友功能需要在类a和类b中以这种方式声明:
template<class t>
friend ostream& operator<< <>(ostream& o,const t& obj);
最佳答案
也将template<class t>
放入friend
声明中。
但是,我不会以这种方式设计operator<<
-为什么它需要访问私有成员?最好将i
的吸气剂同时添加到a
和b
中,并完全避免社交化。
编辑在给定的代码中,甚至不需要friend
声明,因为在两种情况下i
都是public
。我的回答基于这样的假设,即他们打算成为private
,因为否则在这里成为朋友是没有意义的。
关于c++ - 构建泛型重载运算符<<,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6473926/