多态在模板类中的应用
先看一个多态的例子:
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()。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端