工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> C言語

C++ 関数のオーバーライド

C++ 関数のオーバーライド

このチュートリアルでは、例を使用して C++ での関数のオーバーライドについて学習します。

ご存じのとおり、継承は基本クラスから派生クラスを作成できるようにする OOP の機能です。派生クラスは基本クラスの機能を継承します。

派生クラスと基底クラスの両方で同じ関数が定義されているとします。ここで、派生クラスのオブジェクトを使用してこの関数を呼び出すと、派生クラスの関数が実行されます。

これは、関数のオーバーライドとして知られています C++で。派生クラスの関数は、基本クラスの関数をオーバーライドします。


例 1:C++ 関数のオーバーライド

// C++ program to demonstrate function overriding

#include <iostream>
using namespace std;

class Base {
   public:
    void print() {
        cout << "Base Function" << endl;
    }
};

class Derived : public Base {
   public:
    void print() {
        cout << "Derived Function" << endl;
    }
};

int main() {
    Derived derived1;
    derived1.print();
    return 0;
}

出力

Derived Function

ここで、同じ関数 print() Base の両方で定義されています と Derived クラス。

print() を呼び出すと、 Derived から オブジェクト派生1print() Derived から Base の関数をオーバーライドして実行されます .

<図>

ご覧のとおり、Derived のオブジェクトから関数を呼び出したため、関数はオーバーライドされました。 クラス。

print() を呼び出していたら Base のオブジェクトからの関数 クラスでは、関数はオーバーライドされませんでした。

// Call function of Base class
Base base1;
base1.print(); // Output: Base Function

C++ でオーバーライドされた関数にアクセスする

基本クラスのオーバーライドされた関数にアクセスするには、スコープ解決演算子 :: を使用します .

基本クラスのポインターを使用して派生クラスのオブジェクトをポイントし、そのポインターから関数を呼び出すことによって、オーバーライドされた関数にアクセスすることもできます。

例 2:基本クラスへのオーバーライドされた関数への C++ アクセス

// C++ program to access overridden function
// in main() using the scope resolution operator ::

#include <iostream>
using namespace std;

class Base {
   public:
    void print() {
        cout << "Base Function" << endl;
    }
};

class Derived : public Base {
   public:
    void print() {
        cout << "Derived Function" << endl;
    }
};

int main() {
    Derived derived1, derived2;
    derived1.print();

    // access print() function of the Base class
    derived2.Base::print();

    return 0;
}

出力

Derived Function
Base Function

ここで、このステートメント

derived2.Base::print();

print() にアクセスします 基本クラスの機能。

<図>

例 3:派生クラスからオーバーライドされた関数を C++ で呼び出す

// C++ program to call the overridden function
// from a member function of the derived class

#include <iostream>
using namespace std;

class Base {
   public:
    void print() {
        cout << "Base Function" << endl;
    }
};

class Derived : public Base {
   public:
    void print() {
        cout << "Derived Function" << endl;

        // call overridden function
        Base::print();
    }
};

int main() {
    Derived derived1;
    derived1.print();
    return 0;
}

出力

Derived Function
Base Function

このプログラムでは、オーバーライドされた関数を Derived 内で呼び出しています。 クラス自体。

class Derived : public Base {
   public:
    void print() {
        cout << "Derived Function" << endl;
        Base::print();
    }
};

コード Base::print(); に注意してください Derived 内のオーバーライドされた関数を呼び出します クラス。

<図>

例 4:ポインターを使用してオーバーライドされた関数を C++ で呼び出す

// C++ program to access overridden function using pointer
// of Base type that points to an object of Derived class

#include <iostream>
using namespace std;

class Base {
   public:
    void print() {
        cout << "Base Function" << endl;
    }
};

class Derived : public Base {
   public:
    void print() {
        cout << "Derived Function" << endl;
    }
};

int main() {
    Derived derived1;

    // pointer of Base type that points to derived1
    Base* ptr = &derived1;

    // call function of Base class using ptr
    ptr->print();

    return 0;
}

出力

Base Function

このプログラムでは、Base のポインターを作成しました。 ptr という名前の型 .このポインタは Derived を指しています オブジェクト派生1 .

// pointer of Base type that points to derived1
Base* ptr = &derived1;

print() を呼び出すと、 ptr を使用した関数 、オーバーライドされた関数を Base から呼び出します .

// call function of Base class using ptr
ptr->print();

これは ptr Derived を指す オブジェクト、実際には Base のものです タイプ。 Base のメンバー関数を呼び出します。 .

Base をオーバーライドするには 関数にアクセスする代わりに、Base で仮想関数を使用する必要があります。 クラス。


C言語

  1. C++ 演算子
  2. C++ コメント
  3. C++ プログラミングで配列を関数に渡す
  4. C++ 関数とプログラム例
  5. C - 関数
  6. C++ の概要
  7. C++ 定数/リテラル
  8. C++ の演算子
  9. C++ の数値
  10. C++ オーバーロード (演算子と関数)
  11. C++ のポリモーフィズム