##来源于日常学习,好久没更新了...
##参考 CSDN中一位大佬写的 --- <<C++ 模板保姆级详解——template<class T>(什么是模板?模板分哪几类?模板如何应用?)>>
前言.
对于C语言来说,我们通常使用结构体(structure)以及函数(functions) 对一个事物的属性以及它可以完成的功能进行分组,从而实现编程中的sea language。那么C++,作为C的plus版本,面向对象的它,照样可以实现此编程方法。同时还更加高效,我们只需要一个class 便可以完成所有操作。
类(class)
在这里,我将使用矩形这个抽象事物来进行举例讲解class是如何运作的。
完整代码.
#include <iostream>
using namespace std;
//创建一个矩形类
class Rectangle
{
//私有属性..
private:
int length;
int breadth;
//公有方法
public:
Rectangle() {length = breadth = 1;}
Rectangle(int a,int b); //两个构造函数
int area();
int perimeter();
int getLength() { return length;}
void setLength(int l) { length = l;}
~Rectangle(); //析构函数
}
//以下对函数进行声明+定义
Rectangle::Rectangle(int a, int b)
{
length = a;
breadth = b;
}
int Rectangle::area()
{
return length * breadth;
}
int Rectangle::perimeter()
{
return 2 * (length * breadth);
}
Rectangle::~Rectangle()
{
}
拆分解读.
第一部分:
对于类 矩形的解读
class Rectangle
{
private:
int length;
int breadth;
public:
Rectangle() { length = breadth = 1; }
Rectangle(int a, int b); //构造函数
int area();
int perimeter();
int getLength() { return length;}
void setLength(int l) { length = l;}
~Rectangle(); //析构函数
};
class <你想要的类名称> --- 声明一个类
private: --- 私有 这个作用就是把里面的变量 以及 函数等隐藏起来,不给别人进行调用,只能在家里家人自己使用 。 只可以内部调用,不可外部调用。 ---隐藏细节,减小外部影响。
public: ---公有 这个作用就是把这里的变量 以及 函数公开于众人。谁都可以调用它们,以及它们进行更改。 所以在此有个建议就是不要将 类的属性放在public里面,而是放在private里。
Rectangle() 我们看到这个函数它前面没有返回类型, 其实它是构造函数,创建条件是必须与class的类名保持一致。 这里我们有两个构造函数,一个是你一旦创建出一个类便默认赋值
如:Rectangle(){length = breadth = 1;} 而Rectangle(int a,int b); 你可以自己进行赋值初始化操作,必须在创建类的同时进行初始化 例如---Rectangle r(10, 5);
~Rectangle() 这个就是析构函数,作用是删除你创建类时所用到的空间内存 类似于new() 与 delet()的关系。
第二部分:
Rectangle::Rectangle(int a, int b)
{
length = a;
breadth = b;
}
int Rectangle::area()
{
return length * breadth;
}
int Rectangle::perimeter()
{
return 2 * (length * breadth);
}
Rectangle::~Rectangle()
{
}
这里是对我们在类创建时的函数进行声明+定义。
模板是类名::函数名称 --- > 举例是 Rectangle(类名)::area()[这是类里包含的函数]
虚构函数在此不做处理。
Template Class
适用于泛式编程 减少不必要的重复劳作。
模板代表了一个家族且与类型无关,在使用时被参数化,根据实参类型产生特定类型版本。
怎么理解捏...请往下看。
举例子ing
template<class T,class T1,....> 用来定义模板参数关键字 根据你喜欢
这里 你需要使用class 来作为关键字 后面的 名称 按你喜欢的来。
Example:
#include <iostream>
using namespace std;
template <class T> //这里对变量类型进行一个 临时拟定名称
class Arithametic
{
private:
T a;
T b;
public:
Arithametic(T a, T b)
T add();
T sub();
};
这里的变量前的 T是什么??? 函数前面的返回类型T是什么???
其实我们可以这样想, 我们写英语作文是不是有些模板吗,那么模板是不是很多地方都相同,但是老师会留一些空来给我们针对特定的写作要求进行自行填写吧。 这不就是模板的作用吗?
那么道理相同的,这里的 T 在这里发挥的作用就是---老师给我们留下的空,当我们需要重复使用这个类,但是我们参数的类型不相同,是不是要重写一个一模一样的类,区别就是它的变量类型不同而已吧。 编译器会根据传入的类型来对T进行类型调整。
Code:
#include <iostream>
using namespace std;
template <class T> //这里对变量类型进行一个 临时拟定名称
class Arithametic
{
private:
T a;
T b;
public:
Arithametic(T a, T b)
T add();
T sub();
};
//对其进行补全
template<class T>
Arithametic<T>::Arithametic(T a,T b)
{
this->a = a;
this->b = b;
}
template<class T>
T Arithametic<T>::add()
{
T c;
c = a + b;
return c;
}
template<class T>
T Arithametic<T>::sub()
{
T c;
c = a - b;
return c;
}
对其应用,请自己领悟一下。
在main()函数里面对以上的泛式类 进行调用。
int main()
{
Arithametic<int> ar(10,5); //通过类模板创建了一个T为整数型的 类ar
cout<<ar.add();
Arithametic<float> ar(10,5); //通过类模板创建了一个T为浮点型的 类ar
cout<<ar.add();
return 0;
}
最后,感谢你的观看。