2010-06-28 10 views
10

Je suis habitué à l'aide de protocoles Objective-C dans mon code; ils sont incroyables pour beaucoup de choses. Cependant, en C++ je ne sais pas comment faire la même chose. Voici un exemple:Question C++: caractéristique similaire aux protocoles Obj-C?

  1. vue Tableau, qui a une setDelegate fonction (Protocole * délégué)
  2. délégué de classe de classe, mais la mise en œuvre du protocole « protocole »
  3. délégué de Classe2 de classe, la mise en œuvre aussi « Protocole '
  4. setDelegate (objOfClass) et setDelegate (objOfClass2) sont valides

dans Obj-C cela est assez simple, mais je ne peux pas comprendre comment le faire en C++. Est-ce même possible?

Répondre

16

En fait, au lieu de « Protocole » pense « classe de base avec des fonctions virtuelles pures », parfois appelée une interface dans d'autres langues.

class Protocol 
{ 
public: 
    virtual void Foo() = 0; 
}; 

class Class : public Protocol 
{ 
public: 
    void Foo() { } 
}; 

class Class2 : public Protocol 
{ 
public: 
    void Foo() { } 
}; 

class TableView 
{ 
public: 
    void setDelegate(Protocol* proto) { } 
}; 
+0

Merci, sauf que j'ai un problème avec cela. Les différentes classes, à savoir Class et Class2, sont déjà des sous-classes. –

+1

@ jfm429, c'est pourquoi les classes peuvent avoir plusieurs ancêtres. – avakar

+0

Ah, j'ai oublié ça. Je vois beaucoup de problèmes avec elle, en particulier avec des structures de classes particulières que j'ai utilisé dans le passé (je l'ai étudié l'héritage unique/multiple avant et il y a des avantages et des inconvénients, principalement contre), mais dans cette situation, il a gagné » t causer des problèmes. –