【问题标题】:Oop in C++ : what is the diffrence between B* b = new B() and A* b = new B() [closed]C++ 中的糟糕:B* b = new B() 和 A* b = new B() 之间的区别是什么 [关闭]
【发布时间】:2019-07-16 14:33:26
【问题描述】:

我正在学习 C++ 中的 Oop,我一直在遇到这个(B 扩展 A)

A* b = new B()

我搜索了一下,发现 b 具有与 B 类相同的功能,因此我确实(!!)了解这和之间的区别是什么

A* a = new A()

但不要(!!)了解此陈述与:

B* b = new B()

任何帮助:)

【问题讨论】:

  • 阅读更多关于 virtual 关键字和 virtual method table 以及虚拟成员函数的信息。考虑花几天时间阅读一个好的C++ programming book。另见一些C++ reference 网站
  • 我假设您想了解多态性。检查例如this question
  • 请确认类B继承自类A。 (class B : public A {...};)。
  • 您似乎有很多困惑:“b具有与B类相同的功能”不是正确的说法:b是一个对象,而不是一个类。您需要比较的不是语句,而是结果变量。如果您没有两次使用变量名b,这将很有帮助。给指向A 的指针起一个不同的名字,它会澄清你的想法,并让你并排比较一个程序中的变量。所以:A* a = new B(); B* b = new B()

标签: c++ oop inheritance


【解决方案1】:

它只是表明您可以使用超类的指针来引用子类。这对于多态性很有用。

例如,假设您有一个名为“Shape”的类,并且您有其他类,如“Square”和“Triangle”,它们扩展了“Shape”。您可以编写一个对“Shape”进行操作的函数,然后您可以执行以下操作:

void doSomething(Shape* s);

Shape* triangle = new Triangle();
Shape* square = new Square();
doSomething(triangle);
doSomething(square);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 2020-06-12
    • 2012-07-03
    相关资源
    最近更新 更多