ホームページ >バックエンド開発 >C++ >基本クラスの仮想関数をオーバーライドした後に C で呼び出すにはどうすればよいですか?

基本クラスの仮想関数をオーバーライドした後に C で呼び出すにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-05 11:22:10990ブラウズ

How Do I Call a Base Class's Virtual Function in C   After Overriding It?

オーバーライド後の C での基本クラスの仮想関数の呼び出し

ソフトウェア開発では、基本クラスを呼び出す必要があるシナリオに遭遇するのが一般的ですその関数をオーバーライドした場合でも、派生クラスからのクラスの関数。 C では、Java とは異なり、単純な super.funcname() 構文を使用してこれを実現することはできません。

次のコード スニペットを考えてみましょう。

class Foo {
public:
    int x;

    virtual void printStuff() {
        std::cout << x << std::endl;
    }
};

class Bar : public Foo {
public:
    int y;

    void printStuff() {
        // I would like to call Foo.printStuff() here...
        std::cout << y << std::endl;
    }
};

この例では、Bar は Foo から継承します。そして printStuff() 関数をオーバーライドします。ただし、特定のコンテキストでは Foo::printStuff() の元の機能を保持したい場合があります。

C で基本クラスの printStuff() 関数を呼び出すには、:: を使用して基本クラスに明示的に名前を付ける必要があります。オペレーター。その方法は次のとおりです。

class Bar : public Foo {
  // ...

  void printStuff() override {  // help the compiler to check
    Foo::printStuff(); // calls base class' function
  }
};

この変更されたコードでは、オーバーライドされた Bar::printStuff() 関数内で Foo::printStuff() 基本クラス関数が呼び出されます。 override キーワードは、関数が実際に基本クラス関数をオーバーライドしていることをコンパイラが検証するのに役立ちます。

基本クラス関数を明示的に呼び出すことで、printStuff() の基本クラス実装と派生クラス実装の両方を柔軟に使用できるようになります。これは、オーバーライドされた実装の前後に元の関数を呼び出して一般的なタスクを実行するなど、さまざまなシナリオで役立ちます。

以上が基本クラスの仮想関数をオーバーライドした後に C で呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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