Dans l'héritage multiple, la surcharge de fonctions dans la classe dérivée entraîne le masquage ou le remplacement de la fonction de la classe de base, selon que les signatures sont identiques ou non. La structure d'héritage en diamant peut conduire à une ambiguïté car la classe dérivée ne sait pas quelle fonction de classe de base appeler. Les ambiguïtés peuvent être résolues à l'aide de résolveurs de portée explicites, de conversions de types ou d'héritage virtuel.
L'héritage multiple en C++ permet à une classe dérivée d'hériter de plusieurs classes de base Lorsqu'une fonction portant le même nom que la classe de base est définie dans la classe dérivée, elle est définie. C'est ce qu'on appelle la surcharge de fonctions . Les fonctions surchargées ont des effets spécifiques en héritage multiple.
Lorsqu'une classe dérivée redéfinit une fonction dans une classe de base, elle peut masquer ou remplacer cette fonction. Si la signature d'une fonction de classe dérivée est la même que celle d'une fonction de classe de base, la fonction est remplacée ; si la signature de la fonction de classe dérivée est différente, la fonction de classe de base est masquée.
class Base1 { public: void print() { cout << "Base1" << endl; } }; class Base2 { public: void print(int x) { cout << "Base2 " << x << endl; } }; class Derived : public Base1, public Base2 { public: void print() { cout << "Derived" << endl; } // 覆盖 Base1::print() }; int main() { Derived d; d.print(); // 输出 "Derived" d.print(5); // 输出 "Base2 5" }
L'héritage multiple peut former une structure d'héritage en diamant, dans laquelle une classe hérite plusieurs fois de la même classe de base. Cette situation conduit à une ambiguïté dans la surcharge de fonctions car la classe dérivée ne sait pas quelle fonction de classe de base appeler.
class Base { public: void print() { cout << "Base" << endl; } }; class Derived1 : public Base { public: void print() { cout << "Derived1" << endl; } // 覆盖 Base::print() }; class Derived2 : public Base { public: void print() { cout << "Derived2" << endl; } // 覆盖 Base::print() }; class GrandChild : public Derived1, public Derived2 { public: void print() { } // 编译错误:歧义,不知道调用 Derived1::print() 还是 Derived2::print() };
Pour résoudre les ambiguïtés de surcharge de fonctions dans l'héritage multiple, vous pouvez utiliser les méthodes suivantes :
Base::functionName
Spécifie explicitement la base fonction de classe à appeler. Base::functionName
显式指定要调用的基类函数。virtual
virtual
dans la déclaration d'héritage de classe dérivée. Cela garantira que lorsqu'une fonction de classe de base est appelée dans une classe dérivée, la version réelle de l'instance de classe dérivée est appelée, et non la version de la classe de base. 🎜🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!