代码之家  ›  专栏  ›  技术社区  ›  Mykola Golubyev

“Base b=new Derived()”是哪个OO概念的示例?

  •  10
  • Mykola Golubyev  · 技术社区  · 16 年前

    我通过了一个测试,遇到了一个问题,在这个问题上我们没有与我的同事达成一致。

    ++

      1 class Base {};
      2 class Derived : public Base {};
      3 class Foo
      4 {
      5 public:
      6     Foo()
      7     {
     -8-         Base* b = new Derived(); // Concept name is?
      9     }
     10 };
    

    C#

      1 abstract class Base{}
      2 public class Derived : Base{}
      3
      4 public class Foo
      5 {
      6    public Foo
      7    {
     -8-        Base b = new Derived(); // Concept name is?
      9    }
     10 }
    

    问题是:上面的第8行是下面oo概念的一个例子

    1. 多态性
    2. 聚合
    3. 封装
    4. 抽象
    5. 继承

    请把答案与知识来源联系起来。

    P、 这项测试是布雷本奇的“OO概念”。它是免费的。


    从一个能为你辩护的答案中

    简单地说,多态性是 强类型语言,通常是 类型B或类型A实现

    来自维基百科,它为 继承

    继承有时也叫继承 关系表示层次结构 在对象类之间。

    因此,遗产还有另一个 视图,双重的,叫做多态性, 其中许多代码段描述了 代码。

    所以 Base = new Derived() 继承 ). 结果就是 .

    所以我怀疑什么是对的?

    10 回复  |  直到 9 年前
        1
  •  31
  •   Brian ONeil    16 年前

    这个问题很简单。。。它是 多态性 .

    http://en.wikipedia.org/wiki/Polymorphism_(computer_science)

    我希望这足够明确。。。这些都是表达同一件事的不同方式。

    Polymorphism (C# Programming Guide)

    “通过继承,类可以 用作多种类型;可以是 或任何接口类型(如果它实现的话) 接口。这叫做

    [更新]

    在计算机科学中,多态性是 一种编程语言特性 允许不同数据类型的值 接口“

    这意味着我可以将派生的实例视为Base的实例,这表明了多态行为。这并不依赖于类上是否存在虚方法。

    different source ...

    简单地说,多态性是 一种类型的能力,A,表现为 像其他类型的人一样使用 强类型语言,通常是 类型B或类型A实现 表示类型B的接口。”

        2
  •  14
  •   Duck    16 年前

    这应该是一个标准化的选择题,但是你有很多年经验的人没有达成一致意见。唯一应该得出的结论是,作为衡量知识的标准,它是无用的。

        3
  •  7
  •   Mehrdad Afshari    5 年前

    这个片段是关于 Inheritance

    概念概要

    抽象 是关于用对象来建模真实世界概念的整个想法,而不是考虑函数调用或其他东西。它基本上是把对象看作是独立的实体。

    封装 是将对象的实现隐藏在定义良好的接口后面的行为。

    继承

    多态性 意味着两个对象在接口上相似,但行为方式不同(想想 virtual 方法)。

    聚合 定义两个概念之间的“has-a”关系。表示一个对象由另一个实体组成。

        4
  •  7
  •   JohnMcG    16 年前

    我认为答案的多样性表明这是一个结构拙劣的问题。

    如果你用枪指着我的头,我可能会选择 继承

    如果我是在做招聘决定,我更感兴趣的是听应聘者如何为自己选择的答案辩护,而不是她选择了哪一个。但是,使用这种测试的公司可能没有,或者没有任何员工能够评估这一级别的技能。

        5
  •  5
  •   RZachary    16 年前

    多态性

    继承更多的是将成员和/或成员实现从父类继承到子类(也称为从基到派生、从父到子、从抽象到具体)类。

    我认为将虚拟函数解析为具体实现是多态性的一个特性,因此不会因为示例中没有虚拟函数解析而推迟。

        6
  •  4
  •   Evan Teran    16 年前

    看到了吗 http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming

    多态性的例子(也是最常见的)。但这不是唯一的。

    维基百科的文章很好地总结了多态性的定义:

    简单地说,多态性是 一种类型的能力,A,表现为 强类型语言,通常是 意味着A型是从 类型B或类型A实现

    当然,第8行是一个对象的例子 类型 Base 但真的是类型 Derived

        7
  •  3
  •   bayda    16 年前
      • 不,因为我们不调用虚拟方法,也不以任何其他方式使用多态行为
      • 不,因为Base*b不是成员
      • 看不到我们封装了什么。。除了构造函数的实现
      • 我认为-是的-我们将使用更抽象的类然后创建
      • 基和派生之间的关系是继承-但您询问了赋值线

    抽象就是简化复杂 通过建模类实现 在最合适的级别工作 问题。

    维基百科的定义- http://en.wikipedia.org/wiki/Object_oriented

        8
  •  3
  •   ja.    16 年前
        9
  •  2
  •   Robert Lewis    16 年前

    亚型 ( http://en.wikipedia.org/wiki/Subtype 多态性 http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming ). 这个例子并不能说明这一点。

    我想是brainbench上列出的选择

        10
  •  -1
  •   John Dibling    16 年前

    这不是直接给出的任何选择。

    它不是直接关于多态性的,因为代码没有通过基指针调用虚方法,也没有删除指向基类的指针。

    它与继承无关,因为突出显示的代码不执行任何操作继承。行2是关于继承。

    它当然不是关于抽象、封装或聚合的,因为,好吧,它离这些东西不远。