[C++] Jumelage de classes, est-ce possible?

mais en java 5 tu peux aussi le faire
avec les wildcards

void myMethod(list<? extends myObject>)

méthode qui prend alors en compte toutes les liste d’object héritant de myObject

Le soucis en C++ … :stuck_out_tongue: c’est qu’il y a pas de moyen simple, c’est pour cela que ca a été
implémenté dans les languages

[quote=« Zoulou, post:21, topic: 28144 »]mais en java 5 tu peux aussi le faire
avec les wildcards

void myMethod(list<? extends myObject>)

méthode qui prend alors en compte toutes les liste d’object héritant de myObject

Le soucis en C++ … :stuck_out_tongue: c’est qu’il y a pas de moyen simple, c’est pour cela que ca a été
implémenté dans les languages[/quote]

Question off-topic : pour quelle raison ne doit-on pas dériver des collections de base en C# ?

J’ai bien compris l’interet du “transtypage/tri” que fait le foreach, et je reconnais que c’est pratique mais pour le gars, ça résout pas complètement son problème, si?

je suis pas sur de la syntaxe j’ai pas de compilo c# sous la main (et d’ailleurs, j’ai juste fait un hello world en c#), mais si on pousse un peu le code, ça donne un truc comme ça:

[code]class cPersons {
public void ClearAllAges() {
foreach( Person Item in _Liste )
Person.clearAge();
}

private List<Person> _Liste;

}

class cEmployees : public class cPersons {
public void ClearAllIDs() {
foreach( Employee Item in _Liste )
Employee.clearID();
}

}[/code]

Donc bon ok, il a pas eu a redéfinir la méthode clearAllAges, mais pour accéder à la liste, soit il expose la liste à l’extérieur de sa classe cEmployee mais alors il peut ajouter n’importe quelle type qui dérive de Person à sa liste, ce qui n’est pas forcément voulu, soit il doit redéfinir toutes les méthodes de la liste avec comme paramètre un Employee, ce qui est pas “beau” non plus.
Alors comment on fait?

Duffy

Je pense surtout qu’il ferait comme ca:

[code]class cPersons
{
private List _Liste;

public void ClearAllAges()

{
foreach( Person Item in _Liste )
Person.clearAge();
}

public void ClearAllIDs()

{
foreach( Employee Item in _Liste )
Employee.clearID();
}
}[/code]

Ensuite il utilise une seul instance de cpersons et il met dedans les types qu’il arrange.
Je pense que c’est dans ce sens que voulais aller percil. non ?

[quote=“cben76, post:24, topic: 28144”]Je pense surtout qu’il ferait comme ca:

[code]class cPersons
{
private List _Liste;

public void ClearAllAges()

{
foreach( Person Item in _Liste )
Person.clearAge();
}

public void ClearAllIDs()

{
foreach( Employee Item in _Liste )
Employee.clearID();
}
}[/code]

Ensuite il utilise une seul instance de cpersons et il met dedans les types qu’il arrange.
Je pense que c’est dans ce sens que voulais aller percil. non ?[/quote]

Oui mais non, ça je sais le faire en C++ (certes de façon moins élégante et plus longue), grace au typeid / dynamic_cast.
Mais ce qu’il voudrait, c’est 2 instances de cPersons et cEmployees qui n’acceptent que des Person ou que des Employee et qui herittent l’une de l’autre.

bah en fait:

[code]class Persons
{
protected List _Liste;

clearAllAges()
{
foreach(Person P in _Liste)
P.clearAge();
}
}

class Employees : Persons
{
clearAllIDs()
{
foreach(Employee E in _Liste)
E.clearID();
}
}[/code]

De toute facon ca reste du C# 2.0, et c’est pas la réponse :P.

[quote]Cil’ date=’ 29 Mar 2006, 08:39’ post=‹ 457909 ›]
De toute facon ca reste du C# 2.0, et c’est pas la réponse :P.[/quote]

Argh, ça a l’air vraiment simple à faire en C#, mais je ne peux plus changer de langage maintenant, c’est trop tard. Le programme est déjà écrit, je souhaite juste améliorer la hiérarchie de mes classes pour que le code soit plus simple à gérer par la suite.

J’ai mis à disposition les fichiers du problème (.C et .h), ainsi que de la solution avec templates que j’avais mentionnée (.C et .h). Elle permet déjà d’éviter le copier-coller de la méthode ClearAllAges(), c’est déjà ça, mais il y a certainement mieux (ou peut-être moins crétin, c’est selon).

On m’a dit en revanche que ce document pourrait m’aider, je vais y jeter un oeil. Merci en tous cas à ceux qui m’aident sur ce coup :stuck_out_tongue:

on est pas sensé hériter des conteneurs de la stl.