C++のデフォルトの引数と仮想関数
概念を簡単に理解できるように、C++のサンプルプログラムを考えてみましょう-
サンプルコード
#include<iostream> using namespace std; class B { public: virtual void s(int a = 0) { cout<<" In Base \n"; } }; class D: public B { public: virtual void s(int a) { cout<<"In Derived, a="<<a; } }; int main(void) { D d; // An object of class D B *b= &d;// A pointer of type B* pointing to d b->s();// prints"D::s() called" return 0; }と呼ばれる"D::s()を出力します
出力
In Derived, a = 0
この出力では、派生クラスのs()が呼び出され、基本クラスs()のデフォルト値が使用されていることがわかります。
デフォルトの引数は、関数のシグニチャーには関与しません。したがって、基本クラスと派生クラスのs()のシグネチャは同じであると見なされるため、基本クラスのs()はオーバーライドされます。コンパイル時にデフォルト値が使用されます。コンパイラが関数呼び出しで引数が欠落していることを確認すると、指定されたデフォルト値に置き換えられます。したがって、上記のプログラムでは、コンパイル時にxの値が代入され、実行時に派生クラスのs()が呼び出されます。 aの値はコンパイル時に置き換えられ、実行時に派生クラスのs()が呼び出されます。
-
C++でのフレンドクラスと関数
クラスのフレンド関数はそのクラスのスコープ外で定義されていますが、クラスのすべてのプライベートメンバーと保護されたメンバーにアクセスする権利があります。フレンド関数のプロトタイプはクラス定義に表示されますが、フレンドはメンバー関数ではありません。 フレンドは、関数、関数テンプレート、メンバー関数、またはクラスまたはクラステンプレートにすることができます。この場合、クラス全体とそのすべてのメンバーがフレンドになります。 関数をクラスのフレンドとして宣言するには、次のように、クラス定義の関数プロトタイプの前にキーワードfriendを付けます- class Box { double width;
-
デフォルトの仮想動作はC++とJavaでどのように異なりますか?
C ++では、クラスメンバーメソッドはデフォルトで非仮想です。つまり、指定することで仮想化できます。 一方、Javaでは、メソッドはデフォルトで仮想であり、「final」キーワードを使用して非仮想にすることができます。 例 class base_class{ public void display_msg(){ System.out.println("The display_msg method of base class class"); } } class derived_c