首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

小弟我怎么才能写出一个特定的输出运算符友元函数呢

2013-06-25 
我如何才能写出一个特定的输出运算符友元函数呢?#include iostreamusing namespace stdtemplate class

我如何才能写出一个特定的输出运算符友元函数呢?


#include <iostream>
using namespace std;
template <class T>
class num
{
public:
num(T a){m=a;}

friend ostream & operator << <T> (ostream &out, const num<T> &t)
{
out<<t.m<<endl;
return out;

private:
T m;
};
template<>
ostream & operator <<  <char> (ostream &out, const num<char> &t)
{
out<<t.m<<endl;
return out;

int main()
{
num<char> a('a');
cout<<a;
return 0;
}


写了根本编译不通过,咋回事捏。
[解决办法]
引用:
Quote: 引用:

用12L的实现, 是可以编译的(我们不应该让它这样)

测试完毕,12楼也是不可编译的,区别在于你用的什么编译器。

不对吧

template < typename U >
ostream & operator << (ostream & out, const num<U> & t);
的所有实例都是
num<int>
的友元函数

这也就有了
template <>
operator << <char> (ostream & out, const num<char> & t);

num<int>
的友元函数
也即可以修改num<int>对象的m了


[解决办法]
2L方法的测试

#include <iostream>
using namespace std;

template< typename t >
class num;

template< typename T >
ostream & operator << (ostream &out, const num<T> &t);

template <class T>
class num
{
public:
    num(T a)
    {
        m=a;
    }

    friend ostream & operator << <T>(ostream &out, const num< T > &t);

private:
    T m;
};

template< typename T >
ostream & operator << (ostream &out, const num<T> &t)
{
    out << "T " << t.m << endl;
    return out;
}


template< >
ostream & operator << < char > (ostream &out, const num< char > &t)
{
    out<< "char " << t.m <<endl;
    num<int> i(0);
    // i.m = 1; // 当前模式, 不能有这句


    return out;
}

int main(int argc, char * argv[])
{
    num<int>  i(0);
    num<char> c('a');

    cout << i << c;

    return(0);
}



12L方法的测试:

#include <iostream>
using namespace std;

template <class T>
class num
{
public:
    num(T a) : m(a)
    {
        
    }

    template < typename U >
    friend ostream & operator << (ostream & out, const num<U> & t);

private:
    T m;
};

template < typename U >
ostream & operator << (ostream & out, const num<U> & t)
{
    out << "U " << t.m << endl;
    return out;
}

template < >
ostream & operator << <char> (ostream & out, const num<char> & t)
{
    out << "char " << t.m << endl;
    num<int> i(0);
    i.m = 1; // 当前模式, 可以有这句
    return out;
}


int main()
{
    num<int>  i(0);
    num<char> c('a');
    cout << i << c;
    return(0);
}

热点排行