1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
#include <iostream>
#include <string>
template <class T> class Valeur;
template <class T> Valeur<T> operator+(const Valeur<T>& v1,const Valeur<T>& v2);
template <class T> std::ostream& operator<<(std::ostream& flx, const Valeur<T>& v1);
template <class T> class Valeur
{
T val;
friend Valeur<T> operator+ <>(const Valeur<T>& v1,const Valeur<T>& v2);
friend std::ostream& operator<< <>(std::ostream& flx, const Valeur<T>& v1);
public:
operator T() const {return val;}
Valeur(T t):val(t){}
T valeur() const {return val;}
};
template <class T> std::ostream& operator<<(std::ostream& flx, const Valeur<T>& v1)
{
flx<<v1.val;
return flx;
}
template <class T> Valeur<T> operator+(const Valeur<T>& v1,const Valeur<T>& v2)
{
return Valeur<T>(v1.val+v2.val);
}
int main()
{
Valeur<int> v1(1),v2(2);
std::cout<<v1+v2<<std::endl;
Valeur<std::string> s1("Hello "),s2("wolrd");
std::cout<<s1+s2<<std::endl;
return 0;
} |
Partager