クラスAとAを継承するクラスBがあると仮定します。Bオブジェクトを使用する正しい方法は何ですか?「cplusplus.com」で、Bオブジェクトを次のように「使用」していることを確認しました。
B b;
A* a=&b;
クラス「A」ポインタを使用することとbを使用することの違いは何ですか?
ありがとう!
クラスAとAを継承するクラスBがあると仮定します。Bオブジェクトを使用する正しい方法は何ですか?「cplusplus.com」で、Bオブジェクトを次のように「使用」していることを確認しました。
B b;
A* a=&b;
クラス「A」ポインタを使用することとbを使用することの違いは何ですか?
ありがとう!
彼らはあなたができること、そしてあなたがそうするときにポリモーフィズムが呼び出されることを示すためにそれをしただけです。
を使用したいだけの場合はB b
、それを使用してください。必要ありませA*
ん。
余談ですが、インターネットチュートリアルからC ++を学ぶことは、通りで見つけたチューインガムを分析して料理の仕方を学ぶことに似ています。適切な査読付きの本を好む。
基本クラスへのポインターを使用する利点は、仮想関数がある場合に得られます。次のことを想像してみてください
class A {
A(){}
virtual ~A(){} // note virtual destructor
virtual void func(){ cout << "A func" << endl; }
};
class B : public A {
B(){}
virtual ~B(){}
virtual void func(){ cout << "B func" << endl; }
};
class C : public A {
C(){}
virtual ~C(){}
virtual void func(){ cout << "C func" << endl; }
}
これで、基本クラスへのポインターがある場合、それを呼び出すことができ、ポインターが実際に、、、またはfunc()
を指しているかどうかに応じて、正しい関数が呼び出されます。例:A
B
C
A* p1 = new A;
A* p2 = new B;
A* p3 = new C;
p1->func();
p2->func();
p3->func();
以下を出力します
A func
B func
C func
ここで、A、B、およびC型への3つの異なるポインターを別々に使用しないのはなぜかと言うかもしれませんが、ポインターの配列が必要な場合はどうでしょうか。次に、それらはすべて同じタイプ、つまり。である必要がありますA*
。このタイプのポリモーフィズムは、機能や精神は似ているが実装が異なるものをグループ化するのに役立ちます。