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

轻松学 c++之类与对象下篇 + 模板

好久不见各位小伙伴们,那么先前是博主能力有限,加之c++在有些部分确实有些难,使得博主停止学习了一段时间,在这段时间里博主也去重新给自己梳理并总结了一下知识点,那么接下来将会以通俗易懂的方式给大家讲解。、

那么废话不多说,我们进入正题

类与对象下篇

运算符重载

关键字:operator

格式:operator  运算符(参数);

eg.operator + (参数);

多元运算符的简单讲解

。⼀元运算符有⼀个参数,⼆元 运算符有两个参数

注意:operator是默认成员函数,有一个隐藏的this指针,因此参数⽐运算对象少⼀个

不能重载的运算符:.*      ::       sizeof         ?:          .

赋值运算符

赋值运算符重载的特点

1. 赋值运算符重载是⼀个运算符重载,规定必须重载为成员函数。赋值运算重载的参数建议写成 const 当前类类型引⽤,否则会传值传参会有拷⻉

2. 有返回值,且建议写成当前类类型引⽤,引⽤返回可以提⾼效率,有返回值⽬的是为了⽀持连续赋 值场景。

3. 没有显式实现时,编译器会⾃动⽣成⼀个默认赋值运算符重载,默认赋值运算符重载⾏为跟默认构 造函数类似,对内置类型成员变量会完成值拷⻉/浅拷⻉(⼀个字节⼀个字节的拷⻉),对⾃定义类型 成员变量会调⽤他的拷⻉构造。

4. 像Date这样的类成员变量全是内置类型且没有指向什么资源,编译器⾃动⽣成的赋值运算符重载就 可以完成需要的拷⻉,所以不需要我们显⽰实现赋值运算符重载。

总结:1.必须重载为成员函数,且建议用const当前类类型

           2.有返回值,建议用引用

           3.没有写时,会自动生成

初始化列表

格式:类型()

                 :属性

                ,属性

           {#这里面可写可不写,小白阶段建议不写,易混淆#}

eg.  Date()、

            : _year(1900)

            ,  _month(1)

            ,  _day(1)

            {}

注意:这里的初始化顺序是根据类中私有区的声明顺序来初始化的。

static成员

• ⽤static修饰的成员变量,称之为静态成员变量,静态成员变量⼀定要在类外进⾏初始化。

• 静态成员变量为所有类对象所共享,不属于某个具体的对象,不存在对象中,存放在静态区。

• ⽤static修饰的成员函数,称之为静态成员函数,静态成员函数没有this指针。

• 静态成员函数中可以访问其他的静态成员,但是不能访问⾮静态的,因为没有this指针。

• ⾮静态的成员函数,可以访问任意的静态成员变量和静态成员函数。

• 突破类域就可以访问静态成员,可以通过类名::静态成员或者对象.静态成员来访问静态成员变量 和静态成员函数

总结:1. 静态成员变量要在类外初始化

           2.静态成员变量是所有类共享的,且存在静态区中(什么是静态区后面会讲)

           3.静态成员函数没有指针

           4.静态成员函数只能访问其他的静态成员变量和静态成员函数

模板篇

函数模板

这里我不想多提,基本上和c语言的函数比较相似,

template<class T>

T Add(const T& left, const T& right)

{

return left + right;

}

int main()

{

int a1 = 10, a2 = 20;

double d1 = 10.0, d2 = 20.0;

Add(a1, a2);

Add(d1, d2);

return 0;

}

这里的话我还是建议大家看一下我的b站的视频,那里讲的比较详细

视频链接:【c++模板上】https://www.bilibili.com/video/BV1vZa2eaEKb?vd_source=9c17c862acda0523093f08ff7dd82439

类模板

template class Stack

{

public:

Stack(size_t capacity = 4)

{

_array = new T[capacity];

_capacity = capacity;

_size = 0;

}

void Push(const T& data);

private:

T* _array;

size_t _capacity;

size_t _size;

};

template <class  T>

void Stack::Push(const T& data)

{

// 扩容

_array[_size] = data;

++_size;

}

int main()

{

Stack<int> st1;// int

Stack<double> st2; // double

return 0;

}

模板实例化

Stack<int> st1;//模板实例化

stack是类  stack<int>是类型

加餐部分

new

格式:类型  变量 = new 类型[ 空间大小 ]

作用:和malloc一样申请空间,但又比malloc高级,会自动初始化

eg.char  tmp = new char[ capacity + 1 ]

delete

格式:delete[ ]   数组名;

作用:和free的作用一样都是用于释放空间,但需要手动置空

eg.delete[ ]  arr;

那么今天的内容就先到这里了,我们下期见!!!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 流程图绘作方法
  • 【数学建模备赛】Ep02:TOPSIS模型(优劣解距离法)
  • 仿Muduo库实现高并发服务器——事件监控Poller模块
  • 【日常工作与提升式学习分享】
  • 【康复学习--LeetCode每日一题】3152. 特殊数组 II
  • 比OpenAI的Whisper快50%,最新开源语音模型
  • Apache Doris 的 Incremental Read增量读取,数据合并,数据清理
  • Java重修笔记 第三十三天 StringBuffer类、StringBuild类
  • jenkins工具配置
  • 谷歌实用Gmail技巧:批量使用多个外贸邮箱技巧
  • 《计算机组成原理》(第3版)第10章 控制单元的设计 复习笔记
  • 聊聊JS中的WebSocket
  • 2024年8月9号(frp)
  • Verilog基础:模块端口(port)定义的语法(2001标准)
  • C++基础编程100题-040 OpenJudge-1.5-01 求平均年龄
  • .pyc 想到的一些问题
  • css布局,左右固定中间自适应实现
  • interface和setter,getter
  • python docx文档转html页面
  • QQ浏览器x5内核的兼容性问题
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Swift 中的尾递归和蹦床
  • ucore操作系统实验笔记 - 重新理解中断
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 从重复到重用
  • 普通函数和构造函数的区别
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 使用common-codec进行md5加密
  • 线性表及其算法(java实现)
  • 详解NodeJs流之一
  • 一、python与pycharm的安装
  • 优化 Vue 项目编译文件大小
  • ​iOS安全加固方法及实现
  • #1015 : KMP算法
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • $$$$GB2312-80区位编码表$$$$
  • $().each和$.each的区别
  • (CPU/GPU)粒子继承贴图颜色发射
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (附源码)php新闻发布平台 毕业设计 141646
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)菜鸟学数据库(三)——存储过程
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET 6 在已知拓扑路径的情况下使用 Dijkstra,A*算法搜索最短路径
  • .NET BackgroundWorker
  • .net MySql
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .net后端程序发布到nignx上,通过nginx访问
  • [12] 使用 CUDA 加速排序算法
  • [17]JAVAEE-HTTP协议
  • [Android]Android开发入门之HelloWorld