如何使泛型重载运算符<
我写了这段代码,但显然有错误-缺少类型说明符-假定为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的吸气剂同时添加到ab中,并完全避免社交化。

编辑在给定的代码中,甚至不需要friend声明,因为在两种情况下i都是public。我的回答基于这样的假设,即他们打算成为private,因为否则在这里成为朋友是没有意义的。

关于c++ - 构建泛型重载运算符<<,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6473926/

10-09 04:52