私は現在、仮想関数について学習しています。この特定のレッスンでは、オブジェクト ポインターの配列を作成し、firstArray[5]
これらのオブジェクトから関数を呼び出します。func()
今までは、オブジェクトから関数を呼び出したいときはいつでもfoo
と書いていfoo.func()
ました。仮想関数とこの配列を使用するようになったので、この本はこの方法に切り替わりました: firstArray[0]->func()
. この本は、この切り替えを正当化するのにうまく機能していません。誰か説明してもらえますか? を使用しようとすると、これが得られることがわかりfirstArray[0].func()
ます....
error: request for member 'func' in 'firstArray[0]', which is of non-class type 'sampleClass*'
.
実際のオブジェクトではなく、ポインターから関数を呼び出そうとしているだけですか? 私は数か月間 C++ を学んでいますが、何らかの理由でポインタがまだ時々つまずきます。説明があれば役立ちます。
編集:
私を混乱させた部分はこれだと思います..でベースオブジェクトクラスへのポインタを作成できますbase *ptr;
. 次に、派生クラスから新しいオブジェクトを作成することで、そのポインターを設定できますptr = new derived;
。これは私が混乱するところです。を作成しint* ptr;
、作成した整数を指すようにしたい場合、 とは言えませんptr = int j
。ptr
が単なる住所である場合、これら 2 つの例の動作が異なるのはなぜですか? 「新しい」メカニズムもよくわかっていないようです。