継承の曖昧さを解決する 同名の関数が存在する場合、スコープリゾルバー(::)を使用して関数が属するクラスを指定することで、曖昧さを解決できます。派生クラスの基本クラス関数をオーバーライドします。派生クラス オブジェクトへの基本クラス ポインターを作成し、そのポインターを使用して基本クラス関数を呼び出します。
#C 関数継承の詳細説明: 継承の曖昧さの処理 継承の曖昧さ 基底クラスと派生クラスの場合 クラスの場合に同じ名前の関数がある場合、派生クラスでその関数を呼び出すときに曖昧さが生じます。これは、コンパイラがどの関数のバージョンを呼び出すかを判断できないためです。 あいまいさの解決 継承のあいまいさを解決するには、いくつかの方法があります。スコープ リゾルバーを使用します: スコープを使用します。リゾルバー (::) を使用して、呼び出される関数が属するクラスを指定します。
class Base { public: void func() { std::cout << "Base::func()" << std::endl; } }; class Derived : public Base { public: void func() { std::cout << "Derived::func()" << std::endl; } void callBaseFunc() { Base::func(); // 使用作用域解析符调用基类函数 } };
基本クラス関数のオーバーライド: 派生クラスの基本クラス関数をオーバーライドします。
class Base { public: virtual void func() { std::cout << "Base::func()" << std::endl; } }; class Derived : public Base { public: void func() override { std::cout << "Derived::func()" << std::endl; } };
基本クラス ポインターを使用する: 基本クラス ポインターを作成し、派生クラス オブジェクトを指します。次に、ポインターを使用して基本クラス関数を呼び出します。
class Base { public: void func() { std::cout << "Base::func()" << std::endl; } }; class Derived : public Base { public: void func() { std::cout << "Derived::func()" << std::endl; } }; int main() { Base* basePtr = new Derived; basePtr->func(); // 调用基类函数 return 0; }
class Animal { public: void speak() { std::cout << "Animal speaks" << std::endl; } }; class Dog : public Animal { public: void speak() { std::cout << "Dog barks" << std::endl; } }; class Cat : public Animal { public: void speak() { std::cout << "Cat meows" << std::endl; } }; int main() { Animal* animal = new Dog; // 创建指向 Dog 对象的 Animal 指针 animal->speak(); // 调用 Dog::speak() animal = new Cat; // 创建指向 Cat 对象的 Animal 指针 animal->speak(); // 调用 Cat::speak() return 0; }
以上がC++ 関数の継承の詳細な説明: 継承のあいまいさにどう対処するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。