C++ の仮想変数

Namita Chaudhary 2023年10月12日
  1. C++ の仮想変数
  2. まとめ
C++ の仮想変数

ポリモーフィズムは、特定のメッセージを複数の形式で表示できる C++ のオブジェクト指向プログラミングの柱の 1つです。 関数のオーバーロードと関数のオーバーライドによってそれぞれ達成されるコンパイル時とランタイムの 2 種類のポリモーフィズムがあります。

ただし、関数のオーバーライドには、C++ での virtual キーワードの使用が含まれます。 この記事では、C++ の仮想変数について説明します。

C++ の仮想変数

ポリモーフィズムは、多くの形態を持つものとして説明できます。 ポリモーフィズムの実際の例としては、母親であり、娘であり、姉妹であり、義理の娘でもある女性が挙げられます。

ただし、プログラミングの観点からは、同じ型または異なる型のメンバー関数を異なる目的で複数回使用することにより、ポリモーフィズムを実現できます。

ポリモーフィズムには 2つのタイプがあります。コンパイル時 (アーリー バインディングとも呼ばれます) は、関数のオーバーロードまたは演算子のオーバーロードによって実現されます。 簡単に言えば、同じ名前の関数を使用できますが、引数の数または型が異なります。

一方、ランタイムポリモーフィズムは、関数のオーバーライドによって実現されます。

関数のオーバーライドは、同じ名前、型、およびいくつかの引数を持つ関数を使用する機能です。 これは、C++ で virtual キーワードを使用して実現されます。

関数のオーバーライドを実装するために、C++ で仮想関数を作成します。 ただし、仮想変数という名前のそのような概念は C++ には存在しません。

仮想関数は、仮想変数ではなく、ポリモーフィズムを許可する関数です。 仮想関数は、基本クラスで宣言され、派生クラスでオーバーライドされるメンバー関数です。

親クラス ポインターを使用して子クラス オブジェクトを参照するときはいつでも、そのオブジェクトの仮想関数を呼び出し、その関数の子クラス バージョン (派生クラス バージョン) を実行できます。

C++ では、仮想関数を使用すると、異なる型の 2つのクラスを呼び出し元のコードで同じものとして扱うことができ、クラスの内部動作の違いが仮想関数にカプセル化されます。 ただし、仮想変数の場合、変数にアクセスすることで動作がカプセル化されます。

ただし、C++ で仮想関数を使用するだけでポリモーフィズムを実行できます。 同じコードを見てみましょう。

#include <iostream>
using namespace std;
class parent {
 public:
  virtual void print() { cout << "printing the parent class function\n"; }
  void show() { cout << "showing the parent class function"; }
};

class child : public parent {
 public:
  void print() { cout << "printing the child class function\n"; }

  void show() { cout << "showing the child class function\n"; }
};

int main() {
  parent *p;
  child c;
  p = &c;
  p->print();
  p->show();

  return 0;
}

出力:

printing the child class function
showing the parent class function

上記のコード例では、親クラス ポインターを使用して子クラスを参照しているため、そのオブジェクトの仮想関数を呼び出して、関数の子クラス バージョンを実行できます。

したがって、親クラスの print 関数を仮想化し、その後、print() 関数を呼び出すことによって実行される関数は、子クラスにある関数ですが、show() 関数は、 は仮想ではありませんが、関数の親バージョンを出力します。

まとめ

この記事では、C++ におけるポリモーフィズム、仮想関数、および仮想変数について説明しました。 ポリモーフィズムは多くの形式で記述されており、実行時とコンパイル時の 2つのタイプがあります。

ただし、仮想関数は、関数を仮想化することによって C++ でランタイム ポリモーフィズムを実装するために使用される関数です。 ただし、変数にアクセスしてカプセル化する動作がないため、C++ には仮想変数と呼ばれるものはありません。