相关疑难解决方法(0)

C++中的多态性

据我所知:

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

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

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

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

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

但对于另外两个

ad-hoc多态性:

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

参数多态性:

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

我几乎无法理解他们:(

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

c++ polymorphism c++-faq

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

76
推荐指数
4
解决办法
9万
查看次数

在C++中编译时间与运行时多态性的优点/缺点

在C++中,当使用运行时(子类,虚函数)或编译时(模板,函数重载)多态时可以实现相同的功能时,为什么要选择一个而不是另一个?

我认为编译时代的多态性编译代码会更大(为模板类型创建更多的方法/类定义),编译时间会给你更大的灵活性,而运行时会给你"更安全"的多态性(即更难意外使用不正确).

我的假设是否正确?是否还有其他优点/缺点?任何人都可以给出一个具体的例子,其中两个都是可行的选择,但一个或另一个将是一个明显更好的选择?

此外,编译时多态是否会产生更快的代码,因为没有必要通过vtable调用函数,或者这是否会被编译器优化掉?

例:

class Base
{
  virtual void print() = 0;
}

class Derived1 : Base
{
  virtual void print()
  {
     //do something different
  }
}

class Derived2 : Base
{
  virtual void print()
  {
    //do something different
  }
}

//Run time
void print(Base o)
{
  o.print();
}

//Compile time
template<typename T>
print(T o)
{
  o.print();
}
Run Code Online (Sandbox Code Playgroud)

c++ architecture polymorphism

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