首页 > 其他分享 >多态在模板类中的应用

多态在模板类中的应用

时间:2024-03-30 18:33:33浏览次数:25  
标签:eatTmp 子类 多态 public 类中 父类 eat 模板

先看一个多态的例子:

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

相关文章

  • 帝国cms自适应html5古诗词历史名句书籍文章资讯网站源码整站模板sinfo插件带采集会员
    (购买本专栏可免费下载栏目内所有资源不受限制,持续发布中,需要注意的是,本专栏为批量下载专用,并无法保证某款源码或者插件绝对可用,介意不要购买!购买本专栏住如有什么源码需要,可向博主私信,第二天即可发布!博主有几万资源)帝国cms自适应html5古诗词名句书籍文章资讯网站源码整站模板s......
  • 并查集模板
    目录并查集的存储结构并查集查询路径压缩并查集合并合并优化--启发式优化合并优化--按秩合并可撤销并查集算法原理重要操作实现并查集是一种巧妙优雅的数据结构,主要用于解决元素分组和不相交集合的合并和查询问题。并查集是大量的树(单个节点也算是树)经过合并生成一......
  • [web]: HTML 测试模板
    [web]: HTML 测试模板    一、HTML 测试模板内容 <!DOCTYPEhtml><html><head><metacharset="utf-8"><title>测试模板</title><scriptsrc="https://code.jquery.com/jquery-3.7.1.min.js"></script&g......
  • 类模板、函数模板、其他
    类模板、函数模板、其他static示例代码:#ifndef__COMPLEX__#define__COMPLEX__​classcomplex{  //成员函数的隐藏参数有this->形参不能写.返回值当中可以写可以不写  public: doublereal()const{returnthis->re;}  private: doubler......
  • [题解]P1439 【模板】最长公共子序列
    P1439【模板】最长公共子序列题意简述给出\(1,2,…,n\)的两个排列\(P_1\)和\(P_2\),求它们的最长公共子序列。范围限制:\(n\le10^5\)。样例53214512345输出:3。思路简述这道题看似是最长公共子序列,但是发现如果用\(O(n^2)\)的复杂度实现\(LCS\)就会时......
  • yii2 Gii使用和自定义模板
    yii2Gii使用和自定义模板配置开启giiconfig/web.php添加代码if(YII_ENV_DEV){$config['bootstrap'][]='gii';$config['modules']['gii']=['class'=>'yii\gii\Module',];}入口脚本web......
  • 软件项目管理(开发/实施/运维/安全/交付)全套文档模板
      前言:在软件项目管理中,每个阶段都有其特定的目标和活动,确保项目的顺利进行和最终的成功交付。以下是软件项目管理各个阶段的详细资料:软件项目全套文档资料下载:点我获取1.需求阶段目标:收集、分析和定义用户需求和业务目标。主要活动:需求调研:与用户沟通,了解他们的需求......
  • delphi ORM和泛型模板
    delphiORM和泛型模板实现CRUD1)定义数据模型(data-model)数据模型是ORM数据序列/还原所必需的。TTable<T:record>=record//1个表rows:TArray<T>;//表的行end;TTable2<T,T2:record>=record//2个表table1:TTable<T>;......
  • P4556 [Vani有约会] 雨天的尾巴 /【模板】线段树合并
    P4556[Vani有约会]雨天的尾巴/【模板】线段树合并在这题里面讲一下线段树合并。顾名思义就是把多个线段树合并成一个。显然完全二叉线段树(也就是普通线段树)是无法更高效的合并的,只能把所有节点加起来建个新树。但是在动态开点线段树中,有时候一个树只有几条链,这时候我们就是可......
  • 类模板
    1.类模板的基本范例和模板参数的推断基本范例:类模板,也是生产类的工具,通过给定的模板参数,生成具体的类。类模板的声明和实现一般都放在同一个头文件中,因为实例化的时候必须有类模板的全部信息。template<typenameT>//T表示myvector这个容器所存储的元素类型classmyvector......