est-il possible d'hériter de deux classes de base qui ont le même nom, si les espaces de noms sont dans différents espaces de noms?
Au fait, je ne prévois pas à ce moment-là, mais j'étais curieux: p>
6 Réponses :
Physique :: Forme & Graphics :: Forme respectivement? P>
classes dans différents espaces de noms réellement do em> ont des noms différents (en ce qui concerne C ++ concerné), même si la dernière partie du nom ( forme code> dans votre exemple) pourrait être le même. La résolution de nom est effectuée sur le nom pleinement qualifié em>, y compris tous les espaces de noms. P>
Eh bien, simplement:
SuperShape( int x, int y, float color) : Physics::Shape( x, y ), Graphics::Shape( color ) { }
Oui. Les initialiseurs de la mémoire du constructeur devront utiliser des noms qualifiés.
SuperShape::SuperShape( int x, int y, float color ) : Physics::Shape( x, y ), Graphics::Shape( color ) { /*...*/ }
Bien sûr, pourquoi pas? Rien ne vous empêche de le faire. Voici un exemple de travail:
#include <iostream> #include <typeinfo> #include <string> namespace NS1 { class MyClass { public: MyClass (const std::string &) {} }; } namespace NS2 { class MyClass { public: MyClass (int) {} }; } class MyClass : public NS1::MyClass, public NS2::MyClass { public: MyClass () : NS1::MyClass (std::string ("Hello")), NS2::MyClass (1986) {} }; int main () { MyClass clazz; std::cout << typeid (NS1::MyClass).name () << std::endl; std::cout << typeid (NS2::MyClass).name () << std::endl; std::cout << typeid (clazz).name () << std::endl; }
Presque toutes étaient de bonnes réponses, mais celle-ci était la plus complète. Merci à tous!
Comment exécuter à l'aide de la syntaxe de constructeur code> dans ce cas?
Personne n'a indiqué que ceci est la seule raison des raisons de noms de la raison. :) p>
Ce n'est pas les espaces de noms de la raison i>.
BTW, vous avez oublié de mentionner «Public» «Protégé» ou «Privé» dans l'héritage.
@ Soulsurferfer2010: Il n'est pas nécessaire d'indiquer
public code>,
protégé code> ou
privé code>. Dans ce cas, il est par défaut à
privé code> puisqu'il s'agit d'une classe
code>. Pour un
struct code>, il est par défaut sur
publique code>. Personnellement, j'additionne toujours explicitement le modificateur d'accès, mais le code de l'OP est valide C ++ en ce qui concerne l'indice des classes de base.
RE: "Est-il possible d'hériter de deux classes de base qui ont le même nom, si les espaces de noms sont dans différents espaces de noms?" La réponse est oui, car ils ont des noms différents i>
@JohnDibling Oui, cela a été expliqué dans la réponse de @ Greghewgill ci-dessous.
En fait, par toutes les réponses, mais Greg est le plus clairement libéré