C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++のインライン仮想関数


C ++の仮想関数は、派生クラスオブジェクトの種類を知らなくても、基本クラスポインターのリストを作成し、任意の派生クラスのメソッドを呼び出すために使用します。仮想関数は、実行時に遅く解決されます。

仮想関数の主な用途は、ランタイムポリモーフィズムを実現することです。インライン関数は、コードの効率を高めるために使用されます。インライン関数のコードは、インライン関数が呼び出されるたびに、コンパイル時のインライン関数呼び出しの時点で置き換えられます。

基本クラスの参照またはポインターを使用して仮想関数を呼び出す場合は常にインライン化できませんが、コンパイラーはコンパイル時にオブジェクトの正確なクラスを知っているため、そのクラスの参照またはポインターを使用せずにオブジェクトを使用して呼び出す場合は常にインライン化できます。

サンプルコード

#include<iostream>
using namespace std;
class B {
   public:
      virtual void s() {
         cout<<" In Base \n";
      }
};

class D: public B {
   public:
      void s() {
         cout<<"In Derived \n";
      }
};

int main(void) {
   B b;
   D d; // An object of class D
   B *bptr = &d;// A pointer of type B* pointing to d
   b.s();//Can be inlined as s() is called through object of class
   bptr->s();// prints"D::s() called"
   //cannot be inlined, as virtualfunction is called through pointer.
   return 0;
}

出力

In Base
In Derived

  1. C++のインライン関数

    C ++インライン関数は、クラスで一般的に使用される強力な概念です。関数がインラインの場合、コンパイラは、コンパイル時に関数が呼び出される各ポイントにその関数のコードのコピーを配置します。 インライン関数を変更すると、コンパイラはすべてのコードをもう一度置き換える必要があるため、関数のすべてのクライアントを再コンパイルする必要があります。そうしないと、古い機能が続行されます。 関数をインライン化するには、関数名の前にキーワードinlineを配置し、関数を呼び出す前に関数を定義します。定義された関数が1行を超える場合、コンパイラはインライン修飾子を無視できます。 クラス定義の関数定義は、イ

  2. C++でのフレンドクラスと関数

    クラスのフレンド関数はそのクラスのスコープ外で定義されていますが、クラスのすべてのプライベートメンバーと保護されたメンバーにアクセスする権利があります。フレンド関数のプロトタイプはクラス定義に表示されますが、フレンドはメンバー関数ではありません。 フレンドは、関数、関数テンプレート、メンバー関数、またはクラスまたはクラステンプレートにすることができます。この場合、クラス全体とそのすべてのメンバーがフレンドになります。 関数をクラスのフレンドとして宣言するには、次のように、クラス定義の関数プロトタイプの前にキーワードfriendを付けます- class Box { double width;