我正在尝试学习面向对象编程的核心功能,这可能是一个奇怪的问题,但我想问一下:
为什么要使用继承和多态性而不是函数模板实例来调用具有相同签名的成员函数?
最佳答案
模板是一种在编译时(静态)工作的功能,其中可以通过阅读代码并查看每种对象是什么来确定所涉及的所有对象的类型。
另一方面,继承和多态设计用于在编译时我们不知道对象的类型的地方。
例如,考虑以下代码:
Base* ptr = randomCoinTossIsHeads()? new Derived1() : new Derived2();
ptr->virtualFunction();
在这里,无法静态地(在编译时)知道ptr指向的对象类型。它有50%的可能性成为Derived1,有50%的可能性成为Derived2。这意味着我们无法在此处使用模板来确定要调用的函数。模板假定我们确切地知道在生成代码时要处理的是什么类型的东西,而在这里情况并非如此。
希望这可以帮助!
关于c++ - 为什么要使用继承和多态性而不是函数模板实例来调用具有相同签名的成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61085016/