1

以下のコードの定義を書く必要があります。私はOOP Cppのいくつかの基本を理解しています. または が何であるかは知っていますが *x、それ&xだけでは十分ではありません...主な事実は、行が理解できないB* p = new D, m, *k;ということです.m*k

class B {
  public: 
    virtual void msg() { cout << "classB"; }
};

class D: public B {
   public: 
     virtual void msg() { cout << "classD"; }
};

int main() {
  B* p = new D, m, *k;
  p->msg(); k = &m; k->msg();
  . . .
}

このコードがどのように機能するか (およびその理由)を説明できる場合は、助けてください。

御時間ありがとうございます。

4

4 に答える 4

4

一度に複数の変数を宣言します。これは基本的に次と同じです。

B *p = new D;
B  m;
B *k;

newで割り当てられpたインスタンスへのポインタも同様です。はクラスのローカル インスタンスであり、後で に割り当てられる へのポインタです。DmBkBm

このmsg関数は、ポインターpとを介して、割り当てられたオブジェクトの両方で呼び出されますk

*各変数宣言に個別に適用されることに注意してください。したがってB* a, b;、2 つのポインターを宣言するのではなく、1 つのポインターと 1 つのローカル オブジェクトを宣言します。*これが、多くの人が変数名の前に直接書くことを好む理由です:B *a, bこれはもう少し明白になります.

于 2012-07-27T21:08:45.953 に答える
3

C++ では、1 つのステートメントで複数の変数を宣言できます。したがって、変数、および をB* p = new D, m, *k;宣言します。for ポインター宣言は変数名にバインドされるため、基本的にはpmk*

B* p = new D;
B m;
B* k;
于 2012-07-27T21:09:25.550 に答える
0

特別なことは何もありません、それはただの古いCです。

B* p = new D, m, *k;

のショートカットです:

B* p = new D;
B m;
B* k; 
于 2012-07-27T21:09:57.547 に答える
0

pクラス B (または、クラス B の子であるため、D) のオブジェクトへのポインターです。p->msg();に似てい(*p).msg();ます。mはクラス B のオブジェクトであるため、&演算子によってそのポインタを取得し、格納できますk(これはクラス B のオブジェクトへのポインタです)。

B* p = new D, m, *k;

ただです

B* p = new D;
B m;
B* k;

注意:*毎回必要な場合は入れてください

于 2012-07-27T21:13:08.820 に答える