1

我必须在下面编写代码的定义。我不了解 OOP Cpp 的一些基础知识,我知道什么是 *xor &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;不声明两个指针,而是声明一个指针和一个本地对象。这就是很多人喜欢*在变量名前直接写上的原因:B *a, b这样会更明显一点。

于 2012-07-27T21:08:45.953 回答
3

在 C++ 中,您可以在一个语句中声明多个变量。因此B* p = new D, m, *k;声明变量p,mk. *for 指针声明绑定到变量名,因此它基本上等同于

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 类(或 D,因为它是 B 类的子对象)的对象的指针。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 回答