-2

クラスAとAを継承するクラスBがあると仮定します。Bオブジェクトを使用する正しい方法は何ですか?「cplusplus.com」で、Bオブジェクトを次のように「使用」していることを確認しました。

B b;
A* a=&b;

クラス「A」ポインタを使用することとbを使用することの違いは何ですか?

ありがとう!

4

2 に答える 2

2

彼らはあなたができること、そしてあなたがそうするときにポリモーフィズムが呼び出されることを示すためにそれをしただけです。

を使用したいだけの場合はB b、それを使用してください。必要ありませA*ん。

余談ですが、インターネットチュートリアルからC ++を学ぶことは、通りで見つけたチューインガムを分析して料理の仕方を学ぶことに似ています。適切な査読付きの本を好む。

于 2012-11-16T17:09:04.073 に答える
2

基本クラスへのポインターを使用する利点は、仮想関数がある場合に得られます。次のことを想像してみてください

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()を指しているかどうかに応じて、正しい関数が呼び出されます。例:ABC

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*。このタイプのポリモーフィズムは、機能や精神は似ているが実装が異なるものをグループ化するのに役立ちます。

于 2012-11-16T17:09:30.627 に答える