设为首页收藏本站 |天气与日历| 2025-07-02 星期三 01:57:00 乙巳(蛇)年 六月初八 丑时
     
切换到窄版

私人站点

 找回密码
 立即注册
搜索
查看: 184|回复: 0

C++的一些语法特性.八

[复制链接]

954

主题

954

帖子

3879

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3879
发表于 2022-1-14 12:58:04 | 显示全部楼层 |阅读模式
[C] 纯文本查看 复制代码
01-课程回顾.avi
02-函数模板.avi
03-实现对char和int类型的数组排序.avi
04-函数模板和普通函数的区别以及调用规则.avi
05-模板机制和模板局限性.avi
06-类模板基本语法.avi
07-类模板中的成员函数创建时机.avi
08-类模板做函数参数.avi
09-类模板碰到继承的问题以及解决.avi
10-类模板中的成员函数类外实现.avi
11-类模板的分文件编写问题以及解决.avi
12-类模板碰到友元问题以及解决.avi
13-类模板应用-实现通用类型数组案例需求分析.avi
14-类模板应用-实现通用类型数组.avi
1 函数模板
1.1 泛型编程模板技术 特点:类型参数化
1.2 template< typename T >  告诉编译器后面紧跟着的函数或者类中出现T,不要报错,T是一个通用的数据类型
1.3 实现通用两个数进行交换函数
1.4 使用
1.4.1 自动类型推导   必须要推导出一致的T才可以使用
1.4.2 显示指定类型   mySwap<int>(a,b);
2 实现对charint类型数组进行排序
2.1 利用模板技术 实现对charint类型数组通用排序函数
3 函数模板和普通函数的区别以及调用规则
3.1 区别
3.1.1 如果使用自动类型推导,是不可以发生隐式类型转换的
3.1.2 普通函数 可以发生隐式类型转换
3.2 调用规则
3.2.1 如果函数模板和普通函数都可以调用,那么优先调用普通函数
3.2.2 如果想强制调用函数模板,可以使用空模板参数列表
3.2.2.1 myPrint<>(a, b);
3.2.3 函数模板也可以发生函数重载
3.2.4 如果函数模板能产生更好的匹配,那么优先使用函数模板
4 模板的实现机制
4.1 编译器并不是把函数模板处理成能够处理任何类型的函数
4.2 函数模板通过具体类型产生不同的函数 ---  通过函数模板产生的函数 称为模板函数
4.3 编译器会对函数模板进行两次编译,在声明的地方对模板代码本身进行编译,在调用的地方对参数替换后的代码进行编译。
5 模板局限性
5.1 模板并不是真实的通用,对于自定义数据类型,可以使用具体化技术,实现对自定义数据类型特殊使用
5.2 template<> bool myCompare(Person &a, Person &b)
6 类模板
6.1  //类模板和函数模板区别:
6.2  //1、类模板不可以使用自动类型推导,只能用显示指定类型
6.3  //2、类模板中 可以有默认参数
7 类模板中成员函数创建时机
7.1 类模板中的成员函数  并不是一开始创建的,而是在运行阶段确定出T的数据类型才去创建
8 类模板做函数参数
8.1 1指定传入类型
8.1.1 void doWork(Person <string, int>&p)
8.2 2、参数模板化
8.2.1 template<class T1, class T2>
8.2.2 void doWork2(Person <T1, T2>&p)
8.3 3、整个类 模板化
8.3.1 template<class T>
8.3.2 void doWork3( T &p)
8.4 查看T数据类型
8.4.1 typeid(T).name()
9 类模板碰到继承的问题以及解决
9.1 必须要指定出父类中的T数据类型,才能给子类分配内存
9.2 template<class T1 ,class T2>
9.3 class Son2 :public Base2<T2>
10 类模板中的成员函数类外实现
10.1 void Person<T1, T2>::showPerson()
11 类模板的分文件编写问题以及解决
11.1 类模板中的成员函数,不会一开始创建,因此导致分文件编写时连接不到函数的实现,出现无法解析的外部命令错误
11.2 解决方式1
11.2.1 直接包含.cpp文件 (不推荐)
11.3 解决方式2
11.3.1 将类声明和实现写到同一个文件中,将文件的后缀名改为 .hpp 即可
12 类模板碰到友元的问题以及解决
12.1 友元类内实现
12.1.1  friend void printPerson(Person<T1, T2> &p)
12.2 友元类外实现
12.3 声明:
12.3.1 friend void printPerson2<>(Person<T1, T2> &p);
12.4 实现:
12.4.1 template<class T1,class T2>
12.4.2 void printPerson2(Person<T1, T2> &p){ 。。。}
12.5 template<class T1,class T2>
12.6 class Person;
12.7
12.8 template<class T1,class T2>
12.9 void printPerson2(Person<T1, T2> &p);
13 类模板应用数组类封装
13.1 将类写到 myArray.hpp
13.2 属性:
13.2.1 T  * pAddress; 指向堆区数组指针
13.2.2 int m_Capacity 数组容量
13.2.3 int m_Size ;数组大小
13.3 行为
13.3.1 myArray(int capacity)
13.3.2 myArray(const MyArray & arr)
13.3.3 operator=
13.3.4 operator[]
13.3.5 ~myArray()
13.3.6 getCapacity
13.3.7 getSize
13.3.8 pushback
14

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|编程站点 ( 冀ICP备2023028127号-2 )|友链申请|

GMT+8, 2025-7-2 01:57 , Processed in 0.095495 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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