当前位置: 首页 > news >正文

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为整数型的 类arcout<<ar.add();Arithametic<float> ar(10,5);  //通过类模板创建了一个T为浮点型的 类arcout<<ar.add();return 0;
}

最后,感谢你的观看。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 语音助手Verbi:科技创新的未来
  • C++第三十八弹---一万六千字使用红黑树封装set和map
  • 人话学Python-列表
  • 三星麦康的OI与UI
  • 数据链路层 I(组帧、差错控制)【★★★★★】
  • YOLO目标检测的单目(多目标测距),使用相机光学模型,支持目标检测模型训练,可输出目标位置和距离信息并可视化
  • 【Python机器学习】利用SVD简化数据——示例:基于SVD的图像压缩
  • 倍增算法 最近公共祖先(LCA)C++
  • 低代码开发:机遇与挑战并存的技术革新
  • 大数据系列之:Doris Kafka Connector,实时消费Kafka Topic中的数据同步到Doris数据库
  • 【sql】MySQL中的 JOIN 操作
  • react-redux的使用
  • Java编程中接口与实现分离的七种关键技术和设计模式
  • 【OpenHarmony4.1 之 U-Boot 2024.07源码深度解析】019 - RK3568 Uboot 完整流程梳理
  • plantUML介绍和使用
  • Docker入门(二) - Dockerfile
  • Git 使用集
  • JavaScript类型识别
  • js中的正则表达式入门
  • MaxCompute访问TableStore(OTS) 数据
  • Spark学习笔记之相关记录
  • vue自定义指令实现v-tap插件
  • Vue组件定义
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 近期前端发展计划
  • 开发基于以太坊智能合约的DApp
  • 小程序 setData 学问多
  • 异常机制详解
  • 优秀架构师必须掌握的架构思维
  • 再次简单明了总结flex布局,一看就懂...
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 策略 : 一文教你成为人工智能(AI)领域专家
  • 大数据全解:定义、价值及挑战
  • 选择阿里云数据库HBase版十大理由
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • #图像处理
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (2024.6.23)最新版MAVEN的安装和配置教程(超详细)
  • (3)llvm ir转换过程
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (C语言)球球大作战
  • (STM32笔记)九、RCC时钟树与时钟 第二部分
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (四)linux文件内容查看
  • (译)2019年前端性能优化清单 — 下篇
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .net core + vue 搭建前后端分离的框架
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式