C 構文エラー: 基本クラスのコンストラクター呼び出しが正しくありません。どのように対処すればよいですか?
C プログラミングでは、基本クラスのコンストラクターが呼び出される状況によく遭遇します。ただし、このプロセス中に、基本クラスのコンストラクターが誤って呼び出されることがあります。この状況では、多くの場合、プログラムが異常終了するか、不明なエラーが発生します。この状況に遭遇した場合でも、パニックにならないでください。この記事では、間違った基本クラス コンストラクター呼び出しとその対処方法について詳しく説明します。
1. 基本クラスのコンストラクターの誤った呼び出し
C では、基本クラスのすべてのメンバーが正しく初期化されていることを確認するために、派生クラスのコンストラクターはその基本クラスのコンストラクターを呼び出す必要があります。一般に、派生クラス コンストラクターのメンバー初期化リストで基本クラス コンストラクターを呼び出すのが最も一般的な方法です。ただし、基底クラス コンストラクターの呼び出しを間違えると、基底クラス コンストラクターが誤って呼び出される状況が発生します。基本クラス コンストラクターの呼び出しが正しくない一般的な状況をいくつか以下に示します。
#include<iostream> using namespace std; class Base{ public: Base(){} Base(int a){ cout<<"Base class with value : "<<a<<" ";} }; class Derived: public Base{ public: Derived(){} Derived(int a){ cout<<"Derived class with value : "<<a<<" ";} }; int main(){ Derived d(10); // 编译错误:没有与此调用匹配的函数 return 0; }
#include<iostream> using namespace std; class Base{ public: Base(){ cout<<"Base class constructor called "; } }; class Derived: public Base{ public: Derived(){ cout<<"Derived class constructor called "; } Derived(int a){ cout<<"Derived class constructor with value : "<<a<<" called "; } }; int main(){ Derived d; return 0; }
出力結果は次のとおりです:
Base class constructor called Derived class constructor called
上記のコードでは、派生クラスのコンストラクターが基本クラスのコンストラクターを呼び出します。そのため、「基本クラスのコンストラクターが呼び出されました」ただし、派生クラスはコンストラクタが1つしかないため、デフォルトではパラメータなしのコンストラクタが呼び出されるため、「派生クラスのコンストラクタが呼び出されました」も出力されます。基本クラスのコンストラクターを 2 回呼び出すと、エラーが発生します:
#include<iostream> using namespace std; class Base{ public: Base(){ cout<<"Base class constructor called "; } }; class Derived: public Base{ public: Derived(){ cout<<"Derived class constructor called "; } Derived(int a){ cout<<"Derived class constructor with value : "<<a<<" called "; } }; int main(){ Derived d(10); return 0; }
出力結果は次のとおりです:
Base class constructor called Derived class constructor with value : 10 called Base class constructor called
Base クラスは派生クラス コンストラクターのコンストラクターで 2 回呼び出されるため、したがって、「呼び出された基本クラスのコンストラクター」が 2 回出力されます。これは、C では、派生クラス オブジェクトの構築プロセスが最初に基本クラスのコンストラクターを呼び出し、次に派生クラスのコンストラクターを呼び出すためです。したがって、派生クラス コンストラクター内で基本クラス コンストラクターを 2 回呼び出すと、基本クラス コンストラクターが 2 回呼び出され、エラーが発生します。
#include<iostream> using namespace std; class Base{ public: Base(){ f(); } virtual void f(){ cout<<"Base "; } }; class Derived: public Base{ public: Derived(){ cout<<"Derived "; } void f(){ cout<<"Derived "; } }; int main(){ Derived d; return 0; }
出力結果は次のとおりです:
Derived
上記のプログラムでは、基本クラス コンストラクターの f() 関数は仮想関数であり、Derived オブジェクトが作成されると、派生クラス コンストラクターは最初に基本クラスのコンストラクターを呼び出すため、基本クラスの f() 関数が呼び出されます。ただし、基底クラスのコンストラクターで f() が呼び出されたとき、派生クラス オブジェクトのコンストラクターはまだ実行されていないため、派生クラスの f() 関数はまだ呼び出されず、派生クラスの f() 関数のみが呼び出されます。基本クラスが呼び出されています。したがって、出力は「派生」ではなく「ベース」になります。
2. 基本クラスのコンストラクターの不正な呼び出しに対処するにはどうすればよいですか?
基本クラスのコンストラクターが誤って呼び出される状況に遭遇した場合、どのように対処すればよいでしょうか?以下に、間違った基本クラス コンストラクターの呼び出しを処理するいくつかの方法を示します。
つまり、基本クラスのコンストラクターへの不正な呼び出しが発生した場合でも、パニックに陥ることなく、エラーを注意深く確認し、上記の処理方法に従って対処する必要があります。このようにして、基本クラスのコンストラクターへの誤った呼び出しによって引き起こされるプログラム実行エラーを効果的に回避できます。
以上がC++ 構文エラー: 基本クラスのコンストラクター呼び出しが正しくありません。どのように対処すればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。