Supposons que :
1- J'ai une class A virtuelle pure (+ non derivable)
2- Une class B, avec un pattern singleton.
Je derive une class C comme suit :
class C : public class B, bublic class A
{
.=2E....
//methodes de la class A
.=2E....
A* m_interface;
}
ma question est :
Le restant de l'application n'etant pas au courant de la structure de
l'objet C, qui d'ailleure peut varie. Je veux garantir l'acces a un
certain nombre de methodes (c-a-d ceux de la class A), ainsi je dois
transmettre un pointeur de mon interface A.
Voila, si j'utilise une m=E9thode virtuelle de la class A (A->toto()) je
vais bien appele la methode toto reecrite dans ma class B ? ou faut t
il convertir l'instance de la classe A a B (la convertion pointeur
class mere -> fille est accepte ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
James Kanze
On Feb 26, 8:15 am, wrote:
Supposons que : 1- J'ai une class A virtuelle pure (+ non derivable)
Est-ce que tu veux dire « abstraite » ? Des fonctions peuvent être virtuelle pure, mais non les classes. Et je ne comprends pas non-plus le « non derivable » ; si la classe a des fonctions virtuelles pures, il va bien falloir en dériver pour s'en servir.
2- Une class B, avec un pattern singleton.
Je derive une class C comme suit : class C : public class B, bublic class A
Ce qui me semble un peu louche. Comment fais-tu pour dériver d'une classe singleton (dont le constructeur est normalement privé) ?
{ ...... //methodes de la class A ......
A* m_interface;
On a donc affaire à deux instances des dérivées de la classe A, d'une part, l'instance de la classe C même, et de l'autre, un autre objet auquel cette instance pointe.
}
ma question est : Le restant de l'application n'etant pas au courant de la structure de l'objet C, qui d'ailleure peut varie. Je veux garantir l'acces a un certain nombre de methodes (c-a-d ceux de la class A), ainsi je dois transmettre un pointeur de mon interface A.
Transmettre où ? Tel que c'est décrit ci-dessus, C estUn A ; un pointeur à C se convertit implicitement en pointeur à A, et l'utilisateur de C a accès à l'interface A.
Voila, si j'utilise une méthode virtuelle de la class A (A->toto()) je vais bien appele la methode toto reecrite dans ma class B ?
Encore plus confus : jusqu'ici, je n'ai rien vu qui rapproche A et B. Donc, une fonction de B ne peut pas supplanter une fonction de A.
Peut-être ce que tu cherches, c'est une variante du modèle mix-in :
class B : private virtual A { // implémentation de A... } ;
class C : public virtual A, private B { // implémente l'interface d'A au moyen de B... } ;
Typiquement, ça ne sert que quand tu as plusieurs interfaces, ou que l'interface se repartit en plusieurs parties, chacune avec une variété d'implémentations.
ou faut t il convertir l'instance de la classe A a B (la convertion pointeur class mere -> fille est accepte ?
Si C hérite publiquement de B, la conversion C* en B* est implicite et automatique. Mais je ne comprends pas trop ce que tu essaies réelement à faire.
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
On Feb 26, 8:15 am, ccppc...@gmail.com wrote:
Supposons que :
1- J'ai une class A virtuelle pure (+ non derivable)
Est-ce que tu veux dire « abstraite » ? Des fonctions peuvent
être virtuelle pure, mais non les classes. Et je ne comprends
pas non-plus le « non derivable » ; si la classe a des
fonctions virtuelles pures, il va bien falloir en dériver pour
s'en servir.
2- Une class B, avec un pattern singleton.
Je derive une class C comme suit :
class C : public class B, bublic class A
Ce qui me semble un peu louche. Comment fais-tu pour dériver
d'une classe singleton (dont le constructeur est normalement
privé) ?
{
......
//methodes de la class A
......
A* m_interface;
On a donc affaire à deux instances des dérivées de la classe A,
d'une part, l'instance de la classe C même, et de l'autre, un
autre objet auquel cette instance pointe.
}
ma question est :
Le restant de l'application n'etant pas au courant de la structure de
l'objet C, qui d'ailleure peut varie. Je veux garantir l'acces a un
certain nombre de methodes (c-a-d ceux de la class A), ainsi je dois
transmettre un pointeur de mon interface A.
Transmettre où ? Tel que c'est décrit ci-dessus, C estUn A ;
un pointeur à C se convertit implicitement en pointeur à A, et
l'utilisateur de C a accès à l'interface A.
Voila, si j'utilise une méthode virtuelle de la class A (A->toto()) je
vais bien appele la methode toto reecrite dans ma class B ?
Encore plus confus : jusqu'ici, je n'ai rien vu qui rapproche A
et B. Donc, une fonction de B ne peut pas supplanter une fonction
de A.
Peut-être ce que tu cherches, c'est une variante du modèle
mix-in :
class B : private virtual A
{
// implémentation de A...
} ;
class C : public virtual A, private B
{
// implémente l'interface d'A au moyen de B...
} ;
Typiquement, ça ne sert que quand tu as plusieurs interfaces, ou
que l'interface se repartit en plusieurs parties, chacune avec
une variété d'implémentations.
ou faut t
il convertir l'instance de la classe A a B (la convertion pointeur
class mere -> fille est accepte ?
Si C hérite publiquement de B, la conversion C* en B* est
implicite et automatique. Mais je ne comprends pas trop ce que
tu essaies réelement à faire.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
Supposons que : 1- J'ai une class A virtuelle pure (+ non derivable)
Est-ce que tu veux dire « abstraite » ? Des fonctions peuvent être virtuelle pure, mais non les classes. Et je ne comprends pas non-plus le « non derivable » ; si la classe a des fonctions virtuelles pures, il va bien falloir en dériver pour s'en servir.
2- Une class B, avec un pattern singleton.
Je derive une class C comme suit : class C : public class B, bublic class A
Ce qui me semble un peu louche. Comment fais-tu pour dériver d'une classe singleton (dont le constructeur est normalement privé) ?
{ ...... //methodes de la class A ......
A* m_interface;
On a donc affaire à deux instances des dérivées de la classe A, d'une part, l'instance de la classe C même, et de l'autre, un autre objet auquel cette instance pointe.
}
ma question est : Le restant de l'application n'etant pas au courant de la structure de l'objet C, qui d'ailleure peut varie. Je veux garantir l'acces a un certain nombre de methodes (c-a-d ceux de la class A), ainsi je dois transmettre un pointeur de mon interface A.
Transmettre où ? Tel que c'est décrit ci-dessus, C estUn A ; un pointeur à C se convertit implicitement en pointeur à A, et l'utilisateur de C a accès à l'interface A.
Voila, si j'utilise une méthode virtuelle de la class A (A->toto()) je vais bien appele la methode toto reecrite dans ma class B ?
Encore plus confus : jusqu'ici, je n'ai rien vu qui rapproche A et B. Donc, une fonction de B ne peut pas supplanter une fonction de A.
Peut-être ce que tu cherches, c'est une variante du modèle mix-in :
class B : private virtual A { // implémentation de A... } ;
class C : public virtual A, private B { // implémente l'interface d'A au moyen de B... } ;
Typiquement, ça ne sert que quand tu as plusieurs interfaces, ou que l'interface se repartit en plusieurs parties, chacune avec une variété d'implémentations.
ou faut t il convertir l'instance de la classe A a B (la convertion pointeur class mere -> fille est accepte ?
Si C hérite publiquement de B, la conversion C* en B* est implicite et automatique. Mais je ne comprends pas trop ce que tu essaies réelement à faire.
-- James Kanze (GABI Software) email: Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
ccppc400
J'ai mal redige ma question, je m'ene excuse.
J'ai 3 objets A B C
l'objet "A" étant peu important pour la question, on ne peu avoir plusieurs instances de cet objet. Je voudrai garantir une interface unique a tout les modules faisant appel a "C". Ainsi, ma class "C" est definie avec des methodes virtuelles comme suit class B { public: B(); virtual ~B();
Virtual fct1()=0; Virtual fct2()=0; }
l'objet "C" class C:bublic A, public B { ... fct1(); //ecrit dans un fichier txt fct1(); //lit depuis un fichier txt ... instaceB1; // instance de la classe mere B
}
l'objet "D" class C:bublic A, public B { ... fct1(); //ecrit dans un fichier ogg fct1(); //lit depuis un fichier ogg ... instaceB2; // instance de la classe mere B
}
Le but de B est de garantir une interface unique independament du fichier de sortie, un objet "E" qu'a besoin d'ecrire dans un fichier txt recupere une instance type B* instanceB : instanceB1->fct1() qui sera interprete comme la fonction d'ecriture dans un fichier text. InstanceB2->fct1() qui sera interprete comme la fonction d'ecriture dans un fichier ogg. suis je correct dans mon raisonnement ? Il s'agit ici d'acceder a l'instance des classe "C" et "D" depuis les instances de leur class mere.
J'ai mal redige ma question, je m'ene excuse.
J'ai 3 objets A B C
l'objet "A" étant peu important pour la question, on ne peu avoir
plusieurs instances de cet objet.
Je voudrai garantir une interface unique a tout les modules faisant
appel a "C".
Ainsi, ma class "C" est definie avec des methodes virtuelles comme
suit
class B
{
public:
B();
virtual ~B();
Virtual fct1()=0;
Virtual fct2()=0;
}
l'objet "C"
class C:bublic A, public B
{
...
fct1(); //ecrit dans un fichier txt
fct1(); //lit depuis un fichier txt
...
instaceB1; // instance de la classe mere B
}
l'objet "D"
class C:bublic A, public B
{
...
fct1(); //ecrit dans un fichier ogg
fct1(); //lit depuis un fichier ogg
...
instaceB2; // instance de la classe mere B
}
Le but de B est de garantir une interface unique independament du
fichier de sortie, un objet "E" qu'a besoin d'ecrire dans un fichier
txt recupere une instance
type B* instanceB :
instanceB1->fct1() qui sera interprete comme la fonction d'ecriture
dans un fichier text.
InstanceB2->fct1() qui sera interprete comme la fonction d'ecriture
dans un fichier ogg.
suis je correct dans mon raisonnement ?
Il s'agit ici d'acceder a l'instance des classe "C" et "D" depuis les
instances de leur class mere.
l'objet "A" étant peu important pour la question, on ne peu avoir plusieurs instances de cet objet. Je voudrai garantir une interface unique a tout les modules faisant appel a "C". Ainsi, ma class "C" est definie avec des methodes virtuelles comme suit class B { public: B(); virtual ~B();
Virtual fct1()=0; Virtual fct2()=0; }
l'objet "C" class C:bublic A, public B { ... fct1(); //ecrit dans un fichier txt fct1(); //lit depuis un fichier txt ... instaceB1; // instance de la classe mere B
}
l'objet "D" class C:bublic A, public B { ... fct1(); //ecrit dans un fichier ogg fct1(); //lit depuis un fichier ogg ... instaceB2; // instance de la classe mere B
}
Le but de B est de garantir une interface unique independament du fichier de sortie, un objet "E" qu'a besoin d'ecrire dans un fichier txt recupere une instance type B* instanceB : instanceB1->fct1() qui sera interprete comme la fonction d'ecriture dans un fichier text. InstanceB2->fct1() qui sera interprete comme la fonction d'ecriture dans un fichier ogg. suis je correct dans mon raisonnement ? Il s'agit ici d'acceder a l'instance des classe "C" et "D" depuis les instances de leur class mere.