c++ - 为什么要使用继承和多态性而不是函数模板实例来调用具有相同签名的成员函数?

标签 c++ templates inheritance polymorphism

我正在尝试学习面向对象编程的核心功能,这可能是一个奇怪的问题,但我想问一下:

为什么要使用继承和多态性而不是函数模板实例来调用具有相同签名的成员函数?

最佳答案

模板是一种在编译时(静态)工作的功能,其中可以通过阅读代码并查看每种对象是什么来确定所涉及的所有对象的类型。

另一方面,继承和多态设计用于在编译时我们不知道对象的类型的地方。

例如,考虑以下代码:

Base* ptr = randomCoinTossIsHeads()? new Derived1() : new Derived2();
ptr->virtualFunction();

在这里,无法静态地(在编译时)知道ptr指向的对象类型。它有50%的可能性成为Derived1,有50%的可能性成为Derived2。这意味着我们无法在此处使用模板来确定要调用的函数。模板假定我们确切地知道在生成代码时要处理的是什么类型的东西,而在这里情况并非如此。

希望这可以帮助!

关于c++ - 为什么要使用继承和多态性而不是函数模板实例来调用具有相同签名的成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61085016/

相关文章:

java - 为什么一个接口(interface)不能实现另一个接口(interface)?

python - 如何使用基类类型提示在函数中传递子类

c++ - Qt。使 QGraphicsItem 始终跟随光标

C++ 下划线输出

c++ - 如何从 C++ 元组中获取 Args...

java - 如何在子类中正确调用父类(super class)的构造函数?

c++ - 使用标准布局类型与其他语言进行通信

c++ - C++ 编译器能否尝试不同的(模板 T)实现,直到找到一个可以编译(针对 T)的实现?

python - 从 Django 1.5 的 ListView 中删除项目

c++ - C中分配器的错误