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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| #include <iostream>
#include <string>
#include <vector>
template <typename T> struct Ppt
{
Ppt(T & ref) : m_ref(ref) {}
T& operator=(T const& ref) {
std::cout << "(ecrit)";
m_ref = ref;
}
operator T const& () const {
std::cout << "(lit)";
return m_ref;
}
private:
T & m_ref;
};
template <typename T>
std::ostream& operator<<(std::ostream &os, Ppt<T> & ppt) {
return os << static_cast <T const&>(ppt);
}
struct Classe
{
Classe()
: m_i(0)
, m_v(10)
, i(m_i)
, s(m_s)
{}
Ppt<std::string> s2() { return Ppt<std::string>(m_s);}
Ppt<int> operator[](size_t i) { return Ppt<int>(m_v[i]); }
int operator[](size_t i) const { return (m_v[i]); }
private:
int m_i;
std::string m_s;
std::vector<int> m_v;
public:
Ppt<int> i;
Ppt<std::string> s;
};
int main (int argc, char **argv)
{
Classe c;
std::cout << "affiche i: " << c.i << std::endl;
std::cout << "change i" << std::endl;
c.i = 42;
std::cout << "affiche i: " << c.i << std::endl;
std::cout << "change s" << std::endl;
c.s = "toto";
std::cout << "affiche s: ";
std::cout << c.s ;
std::cout << std::endl;
std::cout << "v[5]==" << c[5] << std::endl;
std::cout << "v[6]<-12" << std::endl;
c[6] = 12;
std::cout << "v[6]==" << c[6] << std::endl;
} |
Partager