首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++多态性与我的考试

C++多态性与我的考试
EN

Stack Overflow用户
提问于 2016-01-29 19:51:16
回答 2查看 398关注 0票数 6

几天前我参加了C++考试,我得到了这个问题,我发现我不太清楚,问题是:

解释多态性、虚拟功能和覆盖等术语之间的差异。通过实例获取矩形和三角形的形状面积,编写两个不同的代码片段,说明多态性的实现以及多态和虚拟函数的实现。 给出两个代码段的输出示例。

根据绝对C++ 5 p669,多态性的定义是:

多态是指通过后期绑定机制将多个意义关联到一个函数名的能力。因此,多态、后期绑定和虚拟函数实际上都是同一个主题。

我可以从这个定义中了解到,如果不使用虚拟函数,就不存在多态性,不是吗?所以这个问题没有两种不同的代码片段实现,对吗?只有一个使用虚拟函数

我的问题是:这是一个有效的问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-29 19:57:40

我的问题是:这是一个有效的问题吗?

不,这并不是关于“只有虚拟函数才能在c++中提供多态性”的预期答案。这个问题过于狭隘,而且具有误导性。

多态是指通过后期绑定机制将多个意义关联到一个函数名的能力。因此,多态、后期绑定和虚拟函数实际上都是相同的主题。我可以从这个定义中了解到,如果不使用虚拟函数,就不存在多态性,不是吗?

实际上,如果没有virtual函数,您就可以具有多态性。

它被称为静态多态性,查找CRTP模式SFINAE

后期绑定的重点实际上缩小了动态多态性和(纯) virtual函数的问题。但IMHO考试仍是一次糟糕的考试,题目过于狭窄/不明确。

票数 6
EN

Stack Overflow用户

发布于 2016-01-29 20:05:05

多态性是一个非常抽象的术语,表示CS/CP中的三项内容:

  • 重载(ad多态)。使用单个标识符表示(一般情况下)不同的函数
  • 亚型(包含多态性)。OOP中首选的多态性形式。单个函数处理不同类型对象的能力,但它们的类型都与子类型相关。
  • 泛型(参数多态性)。某些代码以非常抽象的方式编写的能力,以便可以使用不同类型的许多不同值,无论是在不相关类型中。

在OOP 中,重写是在子类型中重新定义以前在超级类型中定义的函数的能力。

在C++中,虚拟函数成员是允许子类型多态性在该类型的所有子类型上操作的方法的限定条件。

代码语言:javascript
运行
复制
class A { // A is a polymorphic type (aka contains virtual function)
  public:
    virtual void f() { cout << "A::f()" << endl; } // virtual for polymorphism
};
class B : public A { // public is necessary to obtain subtyping
  public:
    virtual void f() { cout << "B::f()" << endl; } // overriding
};

...
void func(A &a) { // polymorphism can be obtain either on pointers or references types
  a.f(); // polymorphic call, no one can say what will happens here, at least no more than "some function f will be called"
}
...
A a;
B b;
func(a); // guess what will be printed
func(b); // guess what will be printed
...
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35092873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档