现在我正在学习C++,现在我知道模板的基本概念,它就像一个通用类型,我发现几乎每个c ++程序都使用模板,所以我真的想知道我们什么时候应该使用模板?有人可以总结一下我对c ++模板的体验吗?你什么时候考虑使用模板?
补充: 如果我们定义了这样的功能
template <class myType>
myType GetMax (myType a, myType b) {
return (a>b?a:b);
}
Run Code Online (Sandbox Code Playgroud)
但我们想传递一个对象(自定义类)进行比较,我们该如何实现呢?
补充2: 在下面的答案中,有人写了这个示例代码
template <class myType>
const myType& GetMax (const myType& a, const myType& b) {
return (a<b?b:a);
}
template <class myType, class Compare>
const myType& GetMax (const myType& a, const myType& b, Compare compare) {
return (compare(a,b)?b:a);
}
Run Code Online (Sandbox Code Playgroud)
它是否正确 ?我们可以只传递函数名作为类myType的参数吗?
天儿真好,
简单的答案是,您希望行为保持不变,而与用于实例化类的类型无关.
因此,一堆int将以与一堆浮点数将作为MyClass对象堆栈相同的方式运行.
如果要允许行为的特化,则使用继承和基类.
所以说你有一个名为Animal的基类,它有一个名为makeSound()的成员函数.你不知道每只动物会发出什么样的声音,所以你让makeSound成员函数成为一个虚函数.实际上,因为所有动物都没有默认声音,所以您不知道具有默认行为,因此您将此成员函数声明为纯虚函数.
然后,它告诉任何人创建派生类的实例,例如Lion类,他们必须提供makeSound成员函数的实现,它将以某种方式提供咆哮.
编辑:我忘了补充一点,这是Scott Meyers的优秀书籍"Effective C++"(消毒亚马逊链接)中的一篇文章,我强烈推荐.
HTH
干杯,