-1

これらの指示の解釈がよくわかりません:

virtual int getRadioChannel(RadioRef r) const = 0;
virtual int getNumChannels() = 0;

私にとって、最初のものは関数 getRadioChannel の呼び出しが常に 0 を返すことを意味し、2 つ目は関数 getNumChannels が呼び出されたときに何もしません。私は正しいですか?

前もって感謝します。

4

4 に答える 4

5

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.

于 2013-01-31T09:23:34.283 に答える
2

これらは両方とも純粋仮想関数を宣言しています。宣言されているクラスに定義のない関数。関数の定義がないため、クラスをインスタンス化できません。これらの関数が定義されているクラスのサブクラスのみが可能です

最初のケースでは、それもconst関数です。基本的に、関数の本体でオブジェクトを変更しないことを約束しています。(具体的thisには、関数本体のポインターは にconstなり、関数はオブジェクトで呼び出し可能になりconstます。) 2 番目のケースは、単に「通常の」純粋仮想関数宣言です。

純粋仮想関数についてはこちらで、const 関数についてはこちらで詳しく読むことができます。

于 2013-01-31T09:25:23.160 に答える
1

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.

于 2013-01-31T09:23:48.677 に答える
0
virtual int getRadioChannel(RadioRef r) const { return 0; }

常に 0 を返す関数は次のようになります。他の人が指摘したように、関数を 0 に等しくすると、純粋な仮想関数になります。

純粋仮想関数または純粋仮想メソッドは、派生クラスが抽象クラスでない場合に、派生クラスによって実装する必要がある仮想関数です。純粋仮想メソッドを含むクラスは「抽象」と呼ばれます。直接インスタンス化することはできません。抽象クラスのサブクラスは、継承されたすべての純粋仮想メソッドがそのクラスまたは親クラスによって実装されている場合にのみ、直接インスタンス化できます。

于 2013-01-31T09:25:32.600 に答える