类模板碰到继承问题

  1. 基类如果是模板类,必须让子类告诉编译器 基类中的T到底是什么类型

  2. 如果不告诉,那么无法分配内存,编译不过

  3. 利用参数列表class Child :public Base<int>

     #include<iostream>using namespace std;template<class T>class Base{public:T m_A;};//Child继承于Base必须告诉base中的T的类型,否则T无法分配内存class Child :public Base<int>{};//Child2也是模板类template<class T1,class T2>class Child2 :public Base<int>{public:Child2(){cout << typeid(T1).name ()<< endl;cout << typeid(T2).name ()<< endl;}public:T1 m_B;};void test01(){Child2<int, double >child;//由用户来指定类型}int main(){test01();system("pause");return 0;}
    

类模板类外实现

  1. template<class T1 ,class T2>
    Person<T1, T2>::Person(T1 name, T2 age)

     #include<iostream>#include<string>using namespace std;template<class T1,class T2>class Person{public:Person(T1 name, T2 age);/*{this->m_Name = name;this->m_Age - age;}*/void showPerson();/*{cout << "姓名" << this->m_Name << "年龄" << this->m_Age << endl;}*/T1 m_Name;T2 m_Age;};//类外实现成员函数template<class T1 ,class T2>Person<T1, T2>::Person(T1 name, T2 age){this->m_Name = name;this->m_Age = age;}template<class T1, class T2>void Person<T1, T2>::showPerson(){cout << "姓名" << this->m_Name << "年龄" << this->m_Age << endl;}void test01(){Person <string,int >p1("Mt", 100);p1.showPerson();}int main(){test01();system("pause");return 0;}
    

类模板与友元函数

友员函数类内实现

#include<iostream>
#include<string>
using namespace std;template<class T1,class T2>class Person
{//友员函数类内实现friend void printPerson(Person<T1,T2>&p){cout << "姓名:" << p.m_Name << "年龄:" << p.m_Age << endl;}
public:Person(T1 name, T2 age){this->m_Name = name;this->m_Age = age;}private:T1 m_Name;T2 m_Age;
};void test01(){Person<string, int >p("Tom", 10);printPerson(p);
}int main()
{test01();system("pause");return 0;
}

友员函数类内实现

#include<iostream>
#include<string>
using namespace std;//让编译器提前看到printPerson声明
template<class T1, class T2>class Person;
template<class T1, class T2>void printPerson(Person<T1, T2>&p);template<class T1, class T2>class Person
{//友员函数类内实现    利用空参数列表 告诉编译器 模板函数声明friend void printPerson<>(Person<T1, T2>&p); //普通函数 声明/*{cout << "姓名:" << p.m_Name << "年龄:" << p.m_Age << endl;}*/
public:Person(T1 name, T2 age){this->m_Name = name;this->m_Age = age;}private:T1 m_Name;T2 m_Age;
};//类外实现
template<class T1,class T2>void printPerson(Person<T1, T2>&p)
{cout << "姓名:" << p.m_Name << "年龄:" << p.m_Age << endl;
}void test01(){Person<string, int >p("Tom", 10);printPerson(p);
}int main()
{test01();system("pause");return 0;
}

c++模板---3(类模板碰到继承问题,类模板类外实现,类模板与友元函数)相关推荐

  1. Hibernate中的Entity类之间的继承关系之一MappedSuperclass

    在hibernate中,Entity类可以继承Entity类或非Entity类.但是,关系数据库表之间不存在继承的关系.那么在Entity类之间的继承关系,在数据库表中如何表示呢? Hibernate ...

  2. DotNetty 实现 Modbus TCP 系列 (二) ModbusFunction 类图及继承举例

    DotNetty 实现 Modbus TCP 系列 (一) 报文类 ModbusFunction 类图如下: 如前文所述,所有请求/相应的 PDU 均继承自 ModbusFunction,其子类传入对 ...

  3. python--编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音------使用类的封装继承多态的问题/使用面向对象的思想,设计自定义类,描述出租车和家用轿车的信息

    编写程序:实现乐手弹奏乐器,乐手可以弹奏不同的乐器而发出不同的声音 ------使用类的封装继承多态的问题 class Instrumnet():#乐器类def make_sound(self):pa ...

  4. python3新式类_python 3新式类的多继承

    因为我用的是python3,所以所用到的类都是新式类,这里我说的都是新式类,python2类的继承复杂一些,主要有新式类和老式类.python3类(新式类)的继承是是广度优先,实例如下: class ...

  5. c++友元函数与友元类

    友元函数和友元类的需要: 类具有封装和信息隐藏的特性.只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的.非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公有的,这 ...

  6. C++友元函数和友元类

    文章目录 一.友元的概念 二.友元函数的关键字介绍 三.友元类介绍 3.1友元类总结: 3.2友元类不能继承 3.3 友元关系不能继承 3.4.友元重载 一.友元的概念 1. 类的友元函数是定义在类外 ...

  7. c语言的友元函数的用法,C++友元函数和友元类概念解析

    一.友元函数 友元函数是一种特殊的函数,它需要在类体内进行说明,可以访问类的私有成员和保护成员,但又不是类的成员函数.友元函数的说明如下: friend 数据类型函数名(参数) 其中,friend是说 ...

  8. C++ primer 第七章之 友元函数与友元类

    1.为什么需要友元函数?  类具有封装和信息隐藏的特性: 只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的 ; 非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公 ...

  9. 将类的成员函数作为回调函数(外一篇:友元函数)

    转自:http://blog.csdn.net/xylary/article/details/1548596 将类成员函数用做C回调函数 提出问题:  回调函数是基于C编程的Windows SDK的技 ...

  10. C++ 类和对象(三):构造函数补充、匿名对象、友元、内部类、类的static与const

    构造函数补充 匿名对象 友元 内部类 类的static成员 类的const成员 构造函数补充 列表初始化 讲列表初始化之前,要先讨论一下构造函数里面的语句到底是不是初始化 例子还是上次的日期类 cla ...

最新文章

  1. 也谈压缩感知和贝叶斯大脑
  2. 再读UNPv1:复习、实践、小结
  3. Java基础总结之数组
  4. Linux系统管理初步(七)系统服务管理、chkconfig与systemd 编辑中
  5. C# 参数签名字符串按 ASCII码排序,注意其中的坑
  6. elasticsearch x-pack license过期
  7. Effective Java (7) - 避免终止方法
  8. 前端js使用jszip实现文件压缩功能
  9. SSM框架整合,简单案例
  10. 教程篇:《基础模块2》金蝶K3WISE15.0-注册套打教程
  11. visual studio2019 切换英文语言版本
  12. 《近匠》从Cubieboard到radxa:汤亮的第二次硬件创业
  13. 如何执行存储过程以及如何进行调试?
  14. ABAP inner join 性能影响
  15. 计算机专业学生宿舍用台式,大学带台式机的人多吗 方便吗
  16. 清除对象中值为空的属性
  17. 大学生风力发电风向跟踪实验改进
  18. 操作系统 - 练习题
  19. 字符串的匹配搜索,在主字符串中搜寻子字符串,并给出此子字符串的起始位置,否则找不到
  20. 用Kotlin实现抖音爆红的文字时钟,征服产品小姐姐

热门文章

  1. Linux学习笔记006-启动流程
  2. 01-JAVA语言基础
  3. easyui 插入中间行
  4. 卷积神经网络(CNN)与特殊的卷积
  5. 台湾游戏企业抢滩大陆 研发成竞争核心
  6. vant input框禁止调用手机键盘_【案例分享】适应网银等密码键盘的解决方案
  7. 做折线图坐标轴数字_Excel折线图表的另类表达制作?牛闪君使用了双线表达法来完成...
  8. 台达b3伺服modbus通讯_【数控系统】台达伺服压机控制灵活 精准压合满足各种工序需求...
  9. 8086地址传送指令LEA,LDS,LES
  10. html网页如何获取后台数据库的数据(html + ajax + php + mysql)