これらの指示の解釈がよくわかりません:
virtual int getRadioChannel(RadioRef r) const = 0;
virtual int getNumChannels() = 0;
私にとって、最初のものは関数 getRadioChannel の呼び出しが常に 0 を返すことを意味し、2 つ目は関数 getNumChannels が呼び出されたときに何もしません。私は正しいですか?
前もって感謝します。
これらの指示の解釈がよくわかりません:
virtual int getRadioChannel(RadioRef r) const = 0;
virtual int getNumChannels() = 0;
私にとって、最初のものは関数 getRadioChannel の呼び出しが常に 0 を返すことを意味し、2 つ目は関数 getNumChannels が呼び出されたときに何もしません。私は正しいですか?
前もって感謝します。
Am I right ?
No, not at all.
These are declarations of functions that are intended to form, in part, an interface.
Read about pure virtual functions in your C++ book.
これらは両方とも純粋仮想関数を宣言しています。宣言されているクラスに定義のない関数。関数の定義がないため、クラスをインスタンス化できません。これらの関数が定義されているクラスのサブクラスのみが可能です。
最初のケースでは、それもconst
関数です。基本的に、関数の本体でオブジェクトを変更しないことを約束しています。(具体的this
には、関数本体のポインターは にconst
なり、関数はオブジェクトで呼び出し可能になりconst
ます。) 2 番目のケースは、単に「通常の」純粋仮想関数宣言です。
純粋仮想関数についてはこちらで、const 関数についてはこちらで詳しく読むことができます。
You're not right, the =0
signifies a pure virtual function.
That makes the class abstract and forces all non-abstract derived classes to implement the methods marked as pure.
virtual int getRadioChannel(RadioRef r) const { return 0; }
常に 0 を返す関数は次のようになります。他の人が指摘したように、関数を 0 に等しくすると、純粋な仮想関数になります。
純粋仮想関数または純粋仮想メソッドは、派生クラスが抽象クラスでない場合に、派生クラスによって実装する必要がある仮想関数です。純粋仮想メソッドを含むクラスは「抽象」と呼ばれます。直接インスタンス化することはできません。抽象クラスのサブクラスは、継承されたすべての純粋仮想メソッドがそのクラスまたは親クラスによって実装されている場合にのみ、直接インスタンス化できます。