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

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()が呼び出されます。


  1. C#の1つのクラスにいくつのデストラクタを含めることができますか?

    c#では、デストラクタはクラスの特別なメソッドであり、クラス内で使用されて、クラスのオブジェクトまたはインスタンスを破棄します。 クラス内に存在できるデストラクタは1つだけです 以下は、c#のデストラクタのプロパティです デストラクタはパラメータを取りません デストラクタはチルダ記号(〜)で始まります 構造体(〜)はStructsでは定義できません。 デストラクタを呼び出すことはできません。それらは自動的に呼び出されます。 デストラクタは、オブジェクトの基本クラスでFinalizeを暗黙的に呼び出します。 例 class Demo{   &nbs

  2. デフォルトの仮想動作は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