ホームページ >バックエンド開発 >C++ >C++ 関数のオーバーロードはどのようにポリモーフィズムを実現しますか?

C++ 関数のオーバーロードはどのようにポリモーフィズムを実現しますか?

PHPz
PHPzオリジナル
2024-04-13 12:21:01632ブラウズ

関数のオーバーロードを使用すると、ポリモーフィズムを実現できます。つまり、基本クラス ポインターを介して派生クラス メソッドを呼び出すことができ、コンパイラーは実際のパラメーターの型に基づいてオーバーロードされたバージョンを選択します。この例では、Animal クラスは仮想 makeSound() 関数を定義し、Dog クラスと Cat クラスはこの関数をオーバーライドします。Animal* ポインターを介して makeSound() が呼び出されると、コンパイラーは指定されたオブジェクトに基づいて対応するオーバーライドされたバージョンを呼び出します。タイプ、したがってポリモーフィズムのセックスを実現します。

C++ 函数重载如何实现多态性?

C 関数のオーバーロードはポリモーフィズムをどのように実現しますか?

関数のオーバーロードとは何ですか?

関数のオーバーロードは、同じ名前で、パラメーターの型や数値が異なる複数の関数を同じスコープ内で定義するプログラミング手法です。

関数のオーバーロードを使用してポリモーフィズムを実現するにはどうすればよいですか?

ポリモーフィズムは、基本クラスのポインターまたは参照を通じて派生クラスのメソッドを呼び出すことを可能にする機能です。 C における関数のオーバーロードとポリモーフィズムの関係は次のとおりです。

  • 関数のオーバーロードを使用すると、名前は同じでシグネチャ (パラメーターの型または数) が異なる関数の複数のバージョンを作成できます。
  • 派生クラスのメソッドが基本クラスのポインターまたは参照を通じて呼び出される場合、コンパイラーは実際のパラメーターの型に基づいて呼び出すオーバーロードされたバージョンを選択します。

実践例

次のコードは、関数のオーバーロードを使用してポリモーフィズムを実現する方法を示しています。

#include <iostream>

class Animal {
public:
    virtual void makeSound() {  // 声明为虚函数
        std::cout << "Animal sound" << std::endl;
    }
};

class Dog : public Animal {
public:
    void makeSound() override {  // 重写 makeSound()
        std::cout << "Woof woof" << std::endl;
    }
};

class Cat : public Animal {
public:
    void makeSound() override {  // 重写 makeSound()
        std::cout << "Meow meow" << std::endl;
    }
};

int main() {
    Animal* animalptr;  // 基类指针

    // 指向 Dog 对象
    animalptr = new Dog();
    animalptr->makeSound();  // 调用 Dog::makeSound()

    // 指向 Cat 对象
    animalptr = new Cat();
    animalptr->makeSound();  // 调用 Cat::makeSound()

    delete animalptr;

    return 0;
}

出力:

えー

以上がC++ 関数のオーバーロードはどのようにポリモーフィズムを実現しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。