2012-07-27 82 views
1

我必须写下面代码的定义。我undarstand OOP的CPP一些基础知识,我知道什么是*x&x,但是这还不够...的主要事实是,我无法理解线B* p = new D, m, *k;我不能明白m*k立场。OOP C++,虚函数和新运算符

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

它一次声明多个变量。这基本上是一样的:

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

所以p是一个指向新分配的D一个实例。 m是类的本地实例Bk是指向B稍后在m分配给点。

msg功能通过指针pk呼吁两国分配的对象。

注意*适用于每个变量声明分开。所以B* a, b;不声明两个指针,而是声明一个指针和一个本地对象。这就是很多人喜欢直接在变量名前写上*的原因:B *a, b使得这一点更加明显。

3

在C++中,你可以声明多于一个变量在一个声明。因此B* p = new D, m, *k;声明变量p,mk。该*为指针声明结合所述变量的名字,因此它基本上相同于

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

没什么特别,它只是普通的旧C.

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

只是快捷方式:

B* p = new D; 
B m; 
B* k; 
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; 

注意:你应该把*如果每次

需要