我必须在下面编写代码的定义。我不了解 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();
. . .
}
如果您能解释这段代码如何(以及为什么),请帮忙。
谢谢,抽出时间。
最佳答案
它一次声明多个变量。这与以下内容基本相同:
B *p = new D;
B m;
B *k;
所以p
是一个指向分配了new的D
实例的指针。 m
是类 B
的本地实例,k
是指向 B
的指针,稍后分配给指向m
.
msg
函数通过指针 p
和 k
在两个分配的对象上调用。
请注意,*
分别应用于每个变量声明。所以 B* a, b;
没有声明两个指针,而是声明了一个指针和一个本地对象。这就是为什么很多人更喜欢直接在变量名前面写 *
的原因:B *a, b
使这一点更加明显。
关于c++ - OOP C++、虚函数和新运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11695631/