相关疑难解决方法(0)

C++中的多态性

据我所知:

C++提供了三种不同类型的多态性.

  • 虚拟功能
  • 函数名称重载
  • 运算符重载

除了上述三种类型的多态性外,还存在其他种类的多态性:

  • 运行
  • 编译时间
  • ad-hoc多态性
  • 参数多态性

我知道运行时多态性可以通过虚函数实现 ,静态多态可以通过模板函数实现

但对于另外两个

ad-hoc多态性:

如果可以使用的实际类型的范围是有限的,并且必须在使用之前单独指定组合,则这称为ad-hoc多态.

参数多态性:

如果所有代码都是在没有提及任何特定类型的情况下编写的,因此可以透明地使用任意数量的新类型,这称为参数多态.

我几乎无法理解他们:(

任何人都可以用一个例子解释他们两个吗?我希望这些问题的答案对他们大学的许多新的消息有所帮助.

c++ polymorphism c++-faq

124
推荐指数
2
解决办法
5万
查看次数

我们通常应该使用浮点文字来表示浮点数而不是更简单的双重文字吗?

在C++中(或者只有我们的编译器VC8和VC10) 3.14是双字面文并且3.14f是浮点字面值.

现在我有一位同事说:

我们应该使用float-literals进行浮点计算,使用double-literals进行双重计算,因为在计算中使用常量时,这可能会影响计算的精度.

具体来说,我认为他的意思是:

double d1, d2;
float f1, f2;
... init and stuff ...
f1 = 3.1415  * f2;
f1 = 3.1415f * f2; // any difference?
d1 = 3.1415  * d2;
d1 = 3.1415f * d2; // any difference?
Run Code Online (Sandbox Code Playgroud)

或者,由我添加,甚至:

d1 = 42    * d2;
d1 = 42.0f * d2; // any difference?
d1 = 42.0  * d2; // any difference?
Run Code Online (Sandbox Code Playgroud)

更一般地,只有我可以看到用点2.71828183f是确保我试图不断的指定实际上将放入一个浮动(编译错误/警告其他方式).

有人可以对此有所了解吗?你指定f后缀吗?为什么?

从答案中引用我隐含的理所当然:

如果你正在使用float变量和double literal,整个操作将以double形式完成,然后转换回float.

可能有任何伤害吗?(除了非常非常理论的性能影响?) …

c++ floating-point double literals

29
推荐指数
3
解决办法
8437
查看次数

标签 统计

c++ ×2

c++-faq ×1

double ×1

floating-point ×1

literals ×1

polymorphism ×1