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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
| #include <iostream>
using namespace std;
class Base
{
public:
virtual Base& Fonction1(/*...*/);
virtual Base& Fonction2(/*...*/);
virtual Base& Fonction3(/*...*/);
};
class Derivee1 : public Base
{
public:
virtual Derivee1& Fonction1(/*...*/);
virtual Derivee1& Fonction2(/*...*/);
virtual Derivee1& Fonction3(/*...*/);
};
class Derivee2 : public Base
{
public:
virtual Derivee2& Fonction1(/*...*/);
virtual Derivee2& Fonction2(/*...*/);
virtual Derivee2& Fonction3(/*...*/);
};
Base& Base::Fonction1()
{
cout<<"Base::fonction1"<<endl;
return *this; /* renvoie une référence sur l'objet courent, qui est
* du type Base
*/
}
Base& Base::Fonction2()
{
cout<< "Base::fonction 2"<<endl;
return *this; /* renvoie une référence sur l'objet courent, qui est
* du type Base
*/
}
Base& Base::Fonction3()
{
cout<<"Base::fonction3"<<endl;
return *this; /* renvoie une référence sur l'objet courent, qui est
* du type Base
*/
}
Derivee1& Derivee1::Fonction1()
{
/* aurait pu faire appel explicitement à la méthode adaptée à un type
* Base:
Base::Fonction1();
*/
cout<<"Derivee1::fonction1"<<endl;
return *this; /* renvoie une référence sur l'objet courent, qui est
* du type Derivee1
*/
}
Derivee1& Derivee1::Fonction2()
{
/* aurait pu faire appel explicitement à la méthode adaptée à un type
* Base:
Base::Fonction2();
*/
cout<< "Derivee1::fonction 2"<<endl;
return *this; /* renvoie une référence sur l'objet courent, qui est
* du type Derivee1
*/
}
Derivee1& Derivee1::Fonction3()
{
/* aurait pu faire appel explicitement à la méthode adaptée à un type
* Base:
Base::Fonction3();
*/
cout<<"Derivee1::fonction3"<<endl;
return *this; /* renvoie une référence sur l'objet courent, qui est
* du type Derivee1
*/
}
Derivee2& Derivee2::Fonction1()
{
/* aurait pu faire appel explicitement à la méthode adaptée à un type
* Base:
Base::Fonction1();
*/
cout<<"Derivee2::fonction1"<<endl;
return *this; /* renvoie une référence sur l'objet courent, qui est
* du type Derivee2
*/
}
Derivee2& Derivee2::Fonction2()
{
/* aurait pu faire appel explicitement à la méthode adaptée à un type
* Base:
Base::Fonction2();
*/
cout<< "Derivee2::fonction 2"<<endl;
return *this; /* renvoie une référence sur l'objet courent, qui est
* du type Derivee2
*/
}
Derivee2& Derivee2::Fonction3()
{
/* aurait pu faire appel explicitement à la méthode adaptée à un type
* Base:
Base::Fonction3();
*/
cout<<"Derivee2::fonction3"<<endl;
return *this;
}
/**********************************************/
int main()
{
cout<<"Creation et utilisation d'un objet de type Derive1"<<endl;
Derivee1 d1;
d1.Fonction1()
.Fonction2()
.Fonction3();
cout<<"faisons passer cet objet comme etant du type de base "
<<"et recommencons"<<endl;
Base& b = d1;
b.Fonction1()
.Fonction2()
.Fonction3();
} |
Partager