读书人

小弟我怎么才能写出一个特定的输出运算

发布时间: 2013-06-25 23:45:41 作者: rapoo

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


#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);
}

读书人网 >C++

热点推荐