C++中的类的创建以及模板类的使用template class

##来源于日常学习,好久没更新了...

##参考 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;
}

最后,感谢你的观看。

  • 18
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值