![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
#模板学习
文章平均质量分 72
Mango酱
这个作者很懒,什么都没留下…
展开
-
08模板学习之自己写一个模板数组MyArray案例(等号重载为什么要返回引用)
08模板学习之自己写一个模板数组MyArray案例1 案例代码注意,因为是模板类的编写,所以直接写在同一文件,不必注意.h和.cpp分离时重载运算符的声明或者友元函数的声明。文件命名为:MyArray.hpp。这里为了方便,直接把它塞进main.cpp了,如果想要使用的话分离开即可,但是大可不必,因为有Vector容器可以使用。下面注释已经很清楚了,特别是PushBack函数中调用了等号操作符,它很清楚的让我们知道Vector这些容器PushBack时,容器的值都是拷贝份。#include<原创 2020-12-06 21:11:37 · 415 阅读 · 0 评论 -
07模板学习之模板类的static数据成员的归属问题
07模板学习之模板类的static数据成员的归属问题1 模板类的static数据成员的归属问题分析从上面的图分析,先看类模板中的static int a,若类模板中声明了static数据,那么该a是属于类模板还是属于具体类呢?假设属于类模板,那么通过继承后,所有的具体类将继承类模板的a,也就是说,该类模板的a在所有继承的具体类对象中共享,这样肯定是不合理的。所以我们猜测类模板的static数据属于具体类下面代码例子将演示这一点。对比普通类的static数据,该数据也是属于具体类的,即该类的所有对象共原创 2020-12-06 20:25:03 · 234 阅读 · 0 评论 -
06模板学习之模板类的实现(包含如何实现模板类的分离)
06模板学习之模板类的实现概述:使用过模板编写的人都知道,当我们将一个模板类声明在.h,实现在.cpp后,然后在另一个.cpp文件中调用(一般在main.cpp),编译的时候会报错,为什么呢,留着下面解答。类似错误如下:1 代码如下1)模板的.h文件#pragma once#include<iostream>using namespace std;template<class T>class Person{public: Person(T age);原创 2020-12-06 14:02:52 · 644 阅读 · 0 评论 -
05模板学习之模板类外实现重载运算符和友元函数
05模板学习之模板类外实现重载运算符和友元函数注意1:本文中说的类外是指在单文件的.cpp中实现模板的运算符重载和友元函数,不包含.h文件。注意2:本测试项目在main.cpp中测试,即是一个单文件,模板的单文件和.h、.cpp是有区别的,与平常的普通分离.h,.cpp不一样。1 友元函数在类模板的写法//方法2-友元函数在类模板的声明template<class T> class Person;template<class T> void PrintPerson(P原创 2020-12-06 12:39:13 · 681 阅读 · 2 评论 -
04模板学习之普通类继承类模板和类模板继承类模板的区别
04模板学习之普通类继承类模板和类模板继承类模板的区别1 普通类继承类模板普通类继承模板时,继承的模板类必须确定类型,否则无法通过编译。因为普通类编译时需要确定基类的类型,而基类却无法确定,所以必定报错。template<class T>class Base {public: Base(){}};//普通类继承类模板,int必须写,否则报错class Son :public Base<int> {public: Son(){}};2 类模板继承类模板原创 2020-12-06 10:45:21 · 681 阅读 · 0 评论 -
03模板学习之函数模板案例-写一个int,char通用的冒泡
03模板学习之函数模板案例-写一个int,char通用的冒泡1 直接看代码// 模板测试.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>template<typename Sort>void MySort(Sort *arr, int len) { if (arr == NULL) { return; } for (int i = 0; i < len; i++) { for (i原创 2020-12-06 10:27:34 · 114 阅读 · 0 评论 -
02模板学习之函数模板的编译原理
02模板学习之函数模板的编译原理1 函数模板编译的次数编译器会对函数模板进行两次编译,在声明函数模板地方编译一次,在调用的地方再编译一次。注:该结论是固定的,记住即可。2 函数模板第一次编译后再被调用确定类型后,第二次编译如何生成函数当函数模板声明后(声明即第一次编译)被调用时,出现不同的调用方式时(例如形参不同),编译器将模板生编译成多个函数(调用即第二次编译);若同样的调用方式,则不生成重复的函数,复用已经生成的函数。代码例子讲解://声明后会进行第一次编译template<cla原创 2020-12-04 21:56:19 · 991 阅读 · 0 评论 -
01模板学习之函数模板和普通函数的区别
01模板学习之函数模板和普通函数的区别1 函数模板和普通函数的区别1)函数模板不支持隐式转换,必须全部匹配才能被调用,而普通函数支持隐式转换。例如:template<class T> //或者使用typename代替class,两者一样int MyAdd(T a, T b){ return a+b;}int MyAdd(int a, char b){ return a+b;//普通函数自动转换char成int去计算。}int main(){ int a=1; do原创 2020-12-04 21:04:34 · 310 阅读 · 0 评论