gpt4 book ai didi

c++ - 将对象转换为基类或派生类?

转载 作者:太空宇宙 更新时间:2023-11-04 15:34:31 25 4
gpt4 key购买 nike

有什么区别:

cBase* object = new cDerived();

cDerived* object = new cDerived();

如果是这样,在什么情况下我应该选择一个而不是另一个?

最佳答案

不同之处在于它们将 object 声明为具有不同的类型,这可能会产生很多后果。例如:

  • 如果 cDerived 声明了任何新成员(超出了它从 cBase 继承的内容),则只有带有 cDerived* 对象 的版本才使这些成员可用(除非您明确向下转换回 cDerived*)。
  • 如果 cBase 声明了 cDerived 覆盖的任何非虚拟成员函数,那么调用哪个函数取决于您用来调用它的指针类型。
  • 如果一个函数需要一个cDerived*,那么你不能给它传递一个cBase*(除非你显式向下转换回cDerived*).

关于c++ - 将对象转换为基类或派生类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38216033/

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