C++笔记(面对对象部分复习向)

B站:黑马程序员C++教程

栈区,全局区,堆区和代码区

在这里插入图片描述

析构、构造和static

对象成员与类本身构造顺序,先成员后自己;析构则相反
static修饰成员变量,所有对象共享一份内存,编译阶段分配内存,类内声明类外初始化,静态成员变量也有作用域
static修饰成员函数,所有对象共享同一个函数且静态成员函数只能访问静态成员变量,静态成员函数也有作用域

int A::m_A = 100; 
//可通过直接使用类名来访问静态成员变量
cout << A::m_A << endl;
//同理,静态成员函数也可通过类名访问
cout << A::func()<<endl;

类上的成员变量和成员函数分开存储,空对象占1字节,静态成员不与非静态成员存放在一起

const修饰成员函数

常函数不可修改成员属性
原因:this指针本质为一个指针常量,指针常量本身的指向是不可修改的

在这里插入图片描述
常对象中也可以修改
在这里插入图片描述
等号运算符重载,防止浅拷贝问题,返回自身的对象解决连等操作

在这里插入图片描述
在这里插入图片描述

运算符重载也可以发生函数重载,如类与类相加,类与int相加

在这里插入图片描述
实现了链式编程将函数的返回值改为输出流对象的引用,则后续可一直调用左移输出运算符,友元技术可以让重载左移运算符的函数可以访问私有数据
在这里插入图片描述
继承中构造和析构调用顺序
构造函数先父后子,析构函数则相反

子类中如果出现于父类同名的成员函数,子类的同名成员会将父类的所有同名成员隐藏掉,像访问必须加上作用域如:s.Base::func()
同名静态成员与非静态成员处理方法一致

虚继承能解决菱形继承带来的多份数据重复的问题,虚继承同名成员只会保留一份
虚继承发生后,子类继承的是虚基类指针,虚基类指针指向虚基类表,虚基类表中记录的是偏移量,通过指针+偏移量可以得到同一份成员数据
虚继承语法如下
在这里插入图片描述

多态

静态多态

函数重载和运算符重载

动态多态

派生类和虚函数

区别

在这里插入图片描述
C++中父类引用/指针不需要转换类型就能指向子类对象

在这里插入图片描述
这个函数的运行结果仍然为父类的speak(),因为地址在其编译阶段就已经确定了,无论传入父类还是子类的对象只会执行父类的函数
但是我们想调用子类的speak(),需要在父类中加virtual使得成员函数speak()变成虚函数
在这里插入图片描述

动态多态满足条件

在这里插入图片描述

重写:函数返回值类型 函数名和参数列表必须完全相同。子类重写函数时可写可不写virtual
父类的指针或者引用指向子类的对象

底层原理

不发生重写时
虚函数有对应的虚函数(表指针),这个指针指向虚函数表,当发生调用时,虚函数指针就会根据函数表的指向找到对应的虚函数
虚函数存放虚函数的入口地址
在这里插入图片描述发生重写后
在这里插入图片描述
重写函数后,继承的虚函数表会替换成重写的虚函数,由于传入的是子类对象,所以会从子类的虚函数表中找对应的函数地址,即调用的自身的speak函数
虚函数内部结构
在这里插入图片描述
未发生重写时,子类内部结构,可以发现,仍然是Animal(父类)作用域下的虚函数
在这里插入图片描述
发生重写后,子类虚函数表变成了自身作用域下的虚函数入口地址

在这里插入图片描述

虚析构和纯虚析构

问题:父类指针指向子类对象后,在delete时不会调用子类的析构函数,若子类有堆区的数据,此时发生了内存泄漏
解决方法:把父类的析构函数前加一个virtual关键字改为虚析构
在这里插入图片描述
只有虚析构的类,不算是抽象类

读取文件数据的方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
既然有了函数模板,最好就不要提供普通函数了,否则容易产生二义性

在这里插入图片描述

类模板作为参数函数参数

第一种使用较多
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述主流方法是第二种,将类模板声明和实现写在一个文件里,并将后缀名改成.hpp
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
最好直接类内实现全局函数,用法简单且编译器容易识别
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2810209.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

[c++] char * 和 std::string

1 char * 和 std::string 的区别 char * 字符串是常量字符串&#xff0c;不能修改&#xff1b;std::string 指向的字符串可以修改 实例代码如下图所示&#xff0c;s1 和 s2 均是常量字符串&#xff0c;字符串常量保存在只读数据区&#xff0c;是只读的&#xff0c;不能写&…

Aigtek高压放大器是什么东西做的

在许多电子应用中&#xff0c;需要将低电压信号放大到较高电压以满足特定的需求。为了实现这个目标&#xff0c;高压放大器被广泛采用。高压放大器是一种专用电子设备&#xff0c;使用特定的电路和器件来增益输入信号的电压。它通常由以下几个主要组成部分构成。 电源供应 高压…

C# Onnx yolov8-obb 旋转目标检测

目录 效果 模型信息 项目 代码 下载 C# Onnx Yolov8-OBB 旋转目标检测 效果 模型信息 Model Properties ------------------------- date&#xff1a;2024-02-26T08:38:44.171849 description&#xff1a;Ultralytics YOLOv8s-obb model trained on runs/DOTAv1.0-ms.ya…

TextCNN:文本分类卷积神经网络

模型原理 1、前言2、模型结构3、示例3.1、词向量层3.2、卷积层3.3、最大池化层3.4、Fully Connected层 4、总结 1、前言 TextCNN 来源于《Convolutional Neural Networks for Sentence Classification》发表于2014年&#xff0c;是一个经典的模型&#xff0c;Yoon Kim将卷积神…

B站UP视频播放数据分析之然冉创业说

【背景介绍】 几年前做过类似的分析&#xff0c;但是B站数据加密了&#xff0c;刚好最近在用selenium&#xff0c;就顺手用它爬一下数据。 df pd.read_excel("然冉创业说_13.2万_output.xlsx") df.head() 以上数据在视频播放页面就可以获取到。 【数据分析】 从数…

sqli-labs(less-46)order by 注入

我们打开sql-labs的第46关然后在输入框内输入?id1时会发现页面没有任何的变化&#xff0c;此时我们用Visual Studio Code查看第46关的代码 此时我们发现sql语句是$sql "SELECT * FROM users ORDER BY $id"; &#xff0c;所以现在我们需要了解一下order by语句的作…

Helm vs Kustomize 深度比较

Helm和Kustomize都是流行的Kubernetes集群部署管理工具&#xff0c;本文比较了两者的优缺点&#xff0c;方便读者根据项目实际情况采用适合的方案。原文: Helm vs Kustomize: why, when, and how[1] 挑战 开始讨论之前&#xff0c;先来看看为什么要使用 Helm 或 Kustomize。 这…

AI数字人SadTalker实战

1.概述 AI数字人在营销和品牌推广中扮演着至关重要的角色&#xff0c;许多企业和个人正积极利用数字技术来打造属于自己的财富。有没有一种简单而免费的方式来创建自己的数字人呢&#xff1f;本篇博客笔者将为大家介绍如何搭建属于自己的AI数字人。 2.内容 2.1 什么是SadTalker…

Windows部署WebDAV服务并映射到本地盘符实现公网访问本地存储文件

文章目录 前言1. 安装IIS必要WebDav组件2. 客户端测试3. 使用cpolar内网穿透&#xff0c;将WebDav服务暴露在公网3.1 安装cpolar内网穿透3.2 配置WebDav公网访问地址 4. 映射本地盘符访问 前言 在Windows上如何搭建WebDav&#xff0c;并且结合cpolar的内网穿透工具实现在公网访…

【DL】深度学习之语音识别

目录 1 核心概念 2 安装依赖库 3 实践 语音信号处理&#xff08;Speech Signal Processing&#xff09;简称语音处理。 语音识别&#xff08;ASR&#xff09;和自然语言处理&#xff08;NLP&#xff09;&#xff1a;语音识别就是将语音信号转化成文字文本&#xff0c;简单实…

解决启动服务报./nginx -s reload nginx: [emerg] unknown directive “错误

重启服务报错 bug: ./nginx -s reload nginx: [emerg] unknown directive "? 原因&#xff1a; 一、可能打开没有关闭 二、刚刚编辑的没成功&#xff0c;乱码了&#xff0c;格式问题&#xff0c;重新配置

汇标网系统搭建,让知识产权保护更智能、更便捷!

据国家商标局统计发布&#xff0c;2023年四季度我国商标申请量达到了6,988,704件&#xff0c;有效商标注册量为44,047,071件&#xff01; 商标作为企业的重要资产&#xff0c;现在不仅企业、个体户、个人等等&#xff0c;都想在商标市场分得一杯羹。 目前&#xff0c;国家和社会…

多模态表征中的里程碑—CLIP及中文版Chinese-CLIP:理论揭秘、代码微调与论文阅读 (视觉与语义的奇妙共舞~)

我之前一直在使用CLIP/Chinese-CLIP&#xff0c;但并未进行过系统的疏导。这次正好可以详细解释一下。相比于CLIP模型&#xff0c;Chinese-CLIP更适合我们的应用和微调&#xff0c;因为原始的CLIP模型只支持英文&#xff0c;对于我们的中文应用来说不够友好。Chinese-CLIP很好地…

【深度学习笔记】深度学习训练技巧

深度学习训练技巧 1 优化器 随机梯度下降及动量 随机梯度下降算法对每批数据 ( X ( i ) , t ( i ) ) (X^{(i)},t^{(i)}) (X(i),t(i)) 进行优化 g ∇ θ J ( θ ; x ( i ) , t ( i ) ) θ θ − η g g\nabla_\theta J(\theta;x^{(i)},t^{(i)})\\ \theta \theta -\eta g g…

leetcode:491.递增子序列

1.误区&#xff1a;不能直接对数组排序再求解子集&#xff0c;因为那样就改变了原有数组的顺序 2.树形结构&#xff1a;一个一个取数&#xff0c;然后保证是递增序列&#xff0c;且不能重复。&#xff08;数层上不可以重复取&#xff0c;树枝上可以重复取&#xff09;收集的结…

[蜥蜴书Chapter2] -- 下载和加载数据

目录 一、下载和加载数据的函数代码 二、代码说明 1、urllib.request.urlretrieve 2、extractall 三、如何调用函数 四、查看数据的结构 1、head函数&#xff1a; 2、info函数&#xff1a; 3、describe函数&#xff1a; 4、绘制柱状图&#xff1a; 一、下载和加载数据…

迁移学习帮大忙!成都理工大学搭建 SCDUNet++ 模型进行滑坡测绘

滑坡是最常见的自然灾害之一&#xff0c;通常由地震和降雨引发&#xff0c;会造成严重的财产损失和人员伤亡。由地震触发的山体滑坡所造成的破坏&#xff0c;有时会比地震本身造成的破坏更为严重。大型地震发生之后&#xff0c;快速、准确地开展滑坡测绘工作 (landslide mappin…

ABAP - Function ALV 05 添加选择框列、全选、取消全选

很多用户不习惯原生GRID的选择模式&#xff0c;所以业务需要用到自定义的选择框来进行数据的操作&#xff0c;显示效果如图所示&#xff0c;增加一条选择列&#xff0c;且配置全选和全选全选的按钮功能&#xff0c;如下图所示。 实现这种功能需要用到Fieldcat的参数控制以及GUI…

18 SpringMVC实战

18 SpringMVC实战 1. 课程介绍2. Spring与Spring MVC环境配置 1. 课程介绍 2. Spring与Spring MVC环境配置

Vue 卸载eslint

卸载依赖 npm uninstall eslint --save 然后 进入package.json中&#xff0c;删除残留信息。 否则在执行卸载后&#xff0c;运行会报错。 之后再起项目。