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

关于模板中的运算符重载,该怎么处理

2012-12-16 
关于模板中的运算符重载想在模板中实现运算符的重载#include iostream#include cstringusing namesp

关于模板中的运算符重载
想在模板中实现运算符<<的重载


#include <iostream>
#include <cstring>
using namespace std;


template <typename TType>
ostream &operator <<(ostream &os, TType &a);


template <typename Type>
class Temp
{
private:
Type data;
public:
Temp():data(0){};
Temp(Type a){data = a;};
void Show();
friend ostream & operator <<(ostream &os, Temp<Type> &a);
};

template <typename TType>
ostream &operator <<(ostream &os, TType &a)
{
os << a.data << endl;
return os;
}

template <typename Type>
void Temp<Type>::Show()
{
cout << data << endl;
}

int main()
{
Temp<int> tint(100);
Temp<double> tdouble(11.1);

tint.Show();
tdouble.Show();


cout << tint;
//cout << tdouble;

return 0;
}



提示错误杂没有定义undefined reference to `operator<<(std::ostream&, Temp<int>&)'
求问应该怎么做,谢谢
[最优解释]
#include <iostream>
#include <cstring>
using namespace std;


template <typename TType>
ostream &operator <<(ostream &os, TType &a);


template <typename Type>
class Temp
{
private:
Type data;
public:
Temp():data(0){};
Temp(Type a){data = a;};
void Show();
friend ostream & operator <<(ostream &os, Temp<Type> &a) {
os << a.data << endl;
return os;
}     
};

//template <typename TType>
//ostream &operator <<(ostream &os, TType &a)


template <typename Type>
void Temp<Type>::Show()
{
cout << data << endl;
}

int main()
{
Temp<int> tint(100);
Temp<double> tdouble(11.1);

tint.Show();
tdouble.Show();


cout << tint;
//cout << tdouble;

return 0;
}

[其他解释]


#include <iostream>
#include <cstring>
using namespace std;

template <typename Type>
class Temp
{
private:
Type data;
public:
Temp():data(0){};
Temp(Type a){data = a;};
void Show();
friend ostream & operator <<(ostream &os, Temp<Type> &a)
{
os << a.data << endl;
return os;
};
};

template <typename Type>
void Temp<Type>::Show()
{
cout << data << endl;
}

int main()
{
Temp<int> tint(100);
Temp<double> tdouble(11.1);



tint.Show();
tdouble.Show();


cout << tint;
cout << tdouble;

return 0;
}



这样子是可以的 可是怎么把它弄到类外面来定义呢
[其他解释]
引用:
C/C++ code??123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include <iostream>#include <cstring>using namespace std;  template <typename TType>ostr……


我在3L回复了....不知道怎么在引用中修改代码,太乱了,见谅
[其他解释]
#include <iostream>
#include <cstring>
using namespace std;


template <typename TType>
ostream &operator <<(ostream &os, TType &a);


template <typename Type>
class Temp
{
private:
Type data;
public:
Temp():data(0){};
Temp(Type a){data = a;};
void Show();
friend ostream & operator << <>(ostream &os, Temp<Type> &a);        
};

template <typename TType>
ostream &operator << <>(ostream &os, TType &a)
{
os << a.data << endl;
return os;
}

template <typename Type>
void Temp<Type>::Show()
{
cout << data << endl;
}

int main()
{
Temp<int> tint(100);
Temp<double> tdouble(11.1);

tint.Show();
tdouble.Show();


cout << tint;
//cout << tdouble;

return 0;
}

[其他解释]
这样也是可以的非约束模板友元函数

#include <iostream>
#include <cstring>
using namespace std;

template <typename Type>
class Temp
{
private:
Type data;
public:
Temp():data(0){};
Temp(Type a){data = a;};
void Show();
template <typename T>
friend ostream & operator <<(ostream &os, T &a);
};


template <typename T>
ostream &operator <<(ostream &os, T &a)
{
os << a.data << endl;
return os;
}


template <typename Type>
void Temp<Type>::Show()
{
cout << data << endl;
}

int main()
{
Temp<int> tint(100);
Temp<double> tdouble(11.1);

tint.Show();
tdouble.Show();


cout << tint;
cout << tdouble;

return 0;
}



就是一开始的那种不会用

[其他解释]
原来是friend ostream & operator << <>(ostream &os, Temp<Type> &a);
少了<>用来指出这事模板具体化
看来我看的不仔细啊

谢谢指教

热点排行