欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > C++模板编程——多态在模板中的应用

C++模板编程——多态在模板中的应用

2025/2/5 14:30:24 来源:https://blog.csdn.net/T_killer_/article/details/145441308  浏览:    关键词:C++模板编程——多态在模板中的应用

目录

1. C++中的多态

2. 模板中的多态

3. 模板多态和传统多态的辨析


1. C++中的多态

C++中的多态通常体现在下面这些情况:

  1. 有继承关系的父类和子类,父类中必须含有虚函数,子类又重写了父类中的虚函数。
  2. 当父类的指针指向子类对象或者父类引用了子类对象。
  3. 通过父类的指针或者引用调用子类中重写了的虚函数时,会调用子类的虚函数。

2. 模板中的多态

模板中的多态不涉及到虚函数,甚至不要父类和子类的这种继承关系。所以压根就不需要父类的指针或引用指向了子类的对象。

模板中的多态可以发生在两个毫不相关的对象上,只要它们拥有相同的接口。

下面通过一个代码片段来感受一下:

#include <iostream>using namespace std;class Cat
{
public:void make_sound(){cout << "喵喵喵!" << endl;}
};class Dog
{
public:void make_sound(){cout << "汪汪汪!" << endl;}
};template<typename T>
void make_sound(T& animal)
{animal.make_sound();
}int main()
{Cat cat;Dog dog;make_sound(cat);make_sound(dog);return 0;
}

运行结果如下图所示:

编译器在编译过程中,根据我们传递给make_sound()的参数,实例化出了make_sound<Cat>和make_sound<Dog>这两个函数,不同的类对象在调用不同的函数。这也是一种多态的感觉。

3. 模板多态和传统多态的辨析

传统多态也叫作动态多态,这是一种运行时的多态,通过在运行时查询虚函数表来决定调用哪个虚函数。调用函数时多了一个查询虚函数表的过程,所以性能上多少会有一些影响。

模板中运用的这种多态技术在编译时就确定了调用哪个函数(make_sound<Cat>或make_sound<Dog>),因此模板堕胎并不存在性能问题。在模板中运用的这种多态技术叫做静态多态,只要传递进来的参数支持相同的接口,就可以调用该成员的函数。

模板中的多态相比于传统多态,省略了从同一个父类中继承和虚函数,代码更加简洁,运行性能更好。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com