gpt4 book ai didi

c++ - 这有多虚拟?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:12 25 4
gpt4 key购买 nike

你能解释一下为什么吗:

int main (int argc, char * const argv[]) {
Parent* p = new Child();
p->Method();
return 0;
}

打印“Child::Method()”,以及这个:

int main (int argc, char * const argv[]) {
Parent p = *(new Child());
p.Method();
return 0;
}

打印“Parent::Method()”?

类:

class Parent {
public:
void virtual Method() {
std::cout << "Parent::Method()";
}
};

class Child : public Parent {
public:
void Method() {
std::cout << "Child::Method()";
}
};

谢谢,艾特姆。

最佳答案

您的第二个代码复制一个Child 对象到一个Parent 变量中。通过称为 切片 的过程,它会丢失所有特定于 Child 的信息(即所有属于 Child 的私有(private)字段),因此,所有虚拟与之关联的方法信息。

此外,您的两个代码都泄漏了内存(但我想您知道这一点)。

不过,您可以使用引用。例如:

Child c;
Parent& p = c;
p.Method(); // Prints "Child::Method"

关于c++ - 这有多虚拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1333296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com