鱼C论坛

 找回密码
 立即注册
查看: 1526|回复: 0

[技术交流] C++旅程第10站——类模板3

[复制链接]
发表于 2020-6-4 21:19:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Luck is what you have left over after you give 100 percent.

类模板成员函数类外实现
  1. #include<iostream>
  2. #include<string>

  3. using namespace std;

  4. template<class T1,class T2>
  5. class Student
  6. {
  7.         public:
  8.                 T1 m_name;
  9.                 T2 m_num;
  10.                
  11.                 //成员函数类内声明
  12.                 Student(T1 name,T2 num);
  13.                
  14.                 void showstudent();
  15. };

  16. //构造函数 内外实现
  17. template<class T1,class T2>
  18. Student<T1,T2>::Student(T1 name,T2 num)
  19. {
  20.         this->m_name = name;
  21.         this->m_num = num;
  22. }

  23. //成员函数 类外实现
  24. template<class T1,class T2>
  25. void Student<T1,T2>::showstudent()
  26. {
  27.         cout << "name : " << this->m_name << "  num : " << this->m_num << endl;
  28. }

  29. void test1()
  30. {
  31.         Student<string,int>p("回锅肉",50);
  32.         p.showstudent();
  33. }

  34. int main()
  35. {
  36.         test1();
  37.        
  38.         return 0;
  39. }
复制代码

类模板分文件编写
1、直接包含.cpp源文件
2、将声明和实现写到同一个文件中,并更改后缀名为.hpp(hpp是约定的名称不是强制)

类模板和友元
全局函数类内实现——直接在类内声明友元
全局函数类外实现——需提前让编译器知道全局函数的存在
  1. #include<iostream>
  2. #include<string>

  3. using namespace std;

  4. //全局函数配合友元类外实现
  5. //函数声明模板->函数模板定义->友元

  6. //增加类模板声明
  7. template<class T1,class T2>
  8. class Student;

  9. //需要将实现体写在前面让编译器看到    也可以将实现体写到后面

  10. //实现体写在后面,先声明
  11. template<class T1,class T2>
  12. void showstudent3(Student<T1,T2>&p);

  13. //实现体写在前面
  14. template<class T1,class T2>
  15. void showstudent2(Student<T1,T2>&p)
  16. {
  17.         cout << "showstudent2!!!!!!!!!!!!!!!!!" << endl;
  18.         cout << " name : " << p.m_name << "   num : " << p.m_num << endl;
  19. }

  20. template<class T1,class T2>
  21. class Student
  22. {
  23.         //全局函数类内实现
  24.         friend void showstudent1(Student<T1,T2>&p)
  25.                 {
  26.                         cout << "showstudent1!!!!!!!!!!!!" << endl;
  27.                         cout << "name : " << p.m_name << "   num : " << p.m_num << endl;
  28.                 }
  29.         //全局函数类外实现  类内声明
  30.         //加空模板参数列表
  31.         friend void showstudent2<>(Student<T1,T2>&p);
  32.         friend void showstudent3<>(Student<T1,T2>&p);
  33.        
  34.         public:
  35.                 T1 m_name;
  36.                 T2 m_num;
  37.                
  38.                 Student(T1 name,T2 num)       
  39.                 {
  40.                         this->m_name = name;
  41.                         this->m_num = num;
  42.                 }
  43. };

  44. //实现体实现
  45. template<class T1,class T2>
  46. void showstudent3(Student<T1,T2>&p)
  47. {
  48.         cout << "showstudent3!!!!!!!!!!!!!!!!!" << endl;
  49.         cout << " name : " << p.m_name << "   num : " << p.m_num << endl;
  50. }

  51. void test1()
  52. {
  53.         Student<string,int>a("上上谦",99999);
  54.         showstudent1(a);
  55.         showstudent2(a);
  56.         showstudent3(a);
  57. }

  58. int main()
  59. {
  60.         test1();
  61.        
  62.         return 0;
  63. }
复制代码

                                                      我又来喽

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-15 11:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表