先看一个多态的例子:
class Human {
public:
virtual void eat = 0;
virtual ~Human() {}
};
class Men : public Human {
public:
virtual void eat() {
cout << "男人" << endl;
}
};
class Women : public Human {
public:
virtual void eat() {
cout << "女人" << endl;
}
};
多态的两个条件:
- 父类与子类有继承关系,父类中必须有虚函数,子类重写父类的虚函数;
- 父类的指针或引用指向/引用子类对象;
模板中的多态,并不需要用到父类以及继承的概念,子类也不需要虚函数。
class Men {
public:
void eat() {
cout << "男人" << endl;
}
};
class Women {
public:
void eat() {
cout << "女人" << endl;
}
};
// 加入函数模板:
template<typename T>
void eatEmp(T& obj) {
obj.eat();
}
int main() {
Men objmen;
Women objwomen;
eatTmp(objmen);
eatTmp(objwomen);
}
编译器在编译期间会实例化出eatTmp<Men>和eatTmp<Women>这两个函数,然后不同的类对象obj调用不同类的同名成员函数eat()。
标签:eatTmp,子类,多态,public,类中,父类,eat,模板 From: https://www.cnblogs.com/love-9/p/18105845