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://www.mfbz.cn/a/410553.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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

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

使用CE查找共享代码的多种方法

一般在游戏中,我们会有这样的定义Player和怪物NPC: // 基类 Character class Character { protected:std::string name;int64_t id;int32_t hp;int32_t mp;int32_t level;public:Character(const int64_t name) : id(id) {}virtual void attack() {…

做了个很牛的网站,可以搜索网站的网站到底有多好用?

今天给大家推荐的网站叫做&#xff1a;毒蘑菇 - 搜索 毒蘑菇搜索&#xff0c;顾名思义呢&#xff0c;搜索的功能比较好用&#xff0c;大家上网的时候总是需要记住网站的地址&#xff0c;即使你知道网站的名称&#xff0c;也得跳转到百度然后在搜索&#xff0c;有时候百度上那么…

Windows Server 2012 IIS中发布ASP.NET CORE项目

服务器安装IIS&#xff1a; 微软官网下载SDK&#xff1a; 下载Runtime官网&#xff1a;https://dotnet.microsoft.com/download/dotnet-core 安装成功重启IIS&#xff1a; VS发布项目&#xff1a;

流浪动物救助平台:Java开发的实践与思考

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

DevOps 周期的 6 个 C

中型到大型软件开发项目涉及许多人员、多个团队、资源、工具和开发阶段。它们都需要以某种方式进行管理和简化&#xff0c;不仅可以获得所需的产品&#xff0c;而且还要确保将来在不断变化的环境下易于管理和维护。组织通常遵循许多项目管理模型和技术。DevOps 是其中之一&…

精益生产,创新驱动:机器人技术引领企业的未来之路

随着自动化技术的普及和物联网、人工智能技术的迅速发展&#xff0c;全球制造业正在经历着一场革命性的变革。传统以人力劳动为基础的制造业正逐渐向以机器为主导的智能生产模式转型。企业们正积极探索更高效的制造方式&#xff0c;通过新兴技术提升生产力&#xff0c;同时降低…

该微信用户未开启“公众号安全助手”的消息接收功能,请先开启后再绑定解决操作步骤

1. 关注“公众平台安全助手” 2. 进入“公众平台安全助手”&#xff0c;点击右上角的用户图标&#xff0c;进入公众号信息界面。 3. 进入“公众号信息”界面后&#xff0c;点击右上角的…图标&#xff0c;打开更多选项。 4. 打开“更多选项”后&#xff0c;选择设置选项&#x…

Python高性能web框架--Fastapi快速入门

文章目录 fastapi框架一、预备知识点1.1、http协议一、简介二、 http协议特性三、http请求协议与响应协议 1.2、api接口 二、quick start简单案例 fastapi框架 Fastapi&#xff0c;一个用于构建 API 的现代、快速&#xff08;高性能&#xff09;的web框架。 fastapi的两个核心…

随机分布模型

目录 前言 一、离散型随机变量 1.1 0-1分布 1.2 二项分布 1.3 帕斯卡分布 1.4 几何分布 1.5 超几何分布 1.6 泊松分布 二、连续型随机变量 2.1 均匀分布 2.2 指数分布 2.3 高斯分布/正态分布 2.4 分布&#xff08;抽样分布&#xff09; 2.5 t分布&#xff08;抽样…

pytest钩子函数-pytest_runtest_logreport提取测试用例相关信息

问题&#xff1a;想在每个日志中记录测试用例开始结束时间&#xff0c;获取到测试用例的名称。 解决办法&#xff1a;使用钩子pytest_runtest_logreport 在pytest中&#xff0c;想要在conftest.py文件中获取正在运行的测试用例的名称&#xff0c;可以使用pytest_runtest_logre…

玩转ChatGPT:参考文献速查

一、写在前面 各位大佬&#xff0c;我又回来了&#xff0c;最近2月太忙啦&#xff08;过年、奶娃、本子、材料、结题&#xff09;&#xff0c;断更了。现水一篇证明我还活着&#xff01;&#xff01;&#xff01; 最近在写国自然本子&#xff0c;遇到一个估计大家都会遇到的问…

node14下运行项目报错:regeneratorRuntime is not defined

regeneratorRuntime is not defined&#xff0c;这是由于配置babel出错问题&#xff0c;由于使用了es7语法如async/await而当前babel版本过低 解决&#xff1a; npm install -D babel-plugin-transform-runtime babel-runtime 安装完成后在.babelrc文件下配置&#xff1a; &qu…

Centos7.9环境源码编译安装ffmpeg6.x

1.官网ffmpeg下载源码 https://ffmpeg.org/download.html#build-windows 2.未安装x264库则先安装配置 可以先查询x264库: whereis libx264 安装编译工具和依赖库&#xff1a; sudo yum install gcc make cmake mercurial git yasm pkgconfig autoconf automake libtool sudo…

Easy-Jmeter: 性能测试平台

目录 写在开始1 系统架构2 表结构设计3 测试平台生命周期4 分布式压测5 压力机管理6 用例管理6.1 新增、编辑用例6.2 调试用例6.3 启动测试6.4 动态控量6.5 测试详情6.6 环节日志6.7 实时数据6.8 测试结果 7 测试记录7 用例分析8 系统部署8.1普通部署8.2容器化部署 写在最后 写…

【Node.js】自动生成 API 文档

目录 1、直接使用swagger-ui-express 2、配合swagger-jsdoc 如何在Node.js项目中使用 Swagger 来自动生成 API接口文档&#xff0c;使用生成方式有很多种。本文基于swagger-jsdocswagger-ui-express快速实现 1、直接使用swagger-ui-express // 方便来浏览和测试api npm i sw…

2023年12月CCF-GESP编程能力等级认证C++编程六级真题解析

本文收录于专栏《C++等级认证CCF-GESP真题解析》,专栏总目录・点这里 一、单选题(共15题,共30分) 第1题 关于C++类和对象的说法,错误的是( )。 A:在C++中,一切皆对象,即便是字面量如整数5等也是对象 B:在C++中,可以自定义新的类,并实例化为新的对象 C:在C++中,…

再探二分法

推荐阅读 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;一&#xff09; 智能化校园&#xff1a;深入探讨云端管理系统设计与实现&#xff08;二&#xff09; 文章目录 推荐阅读二分查找题目思路解法左闭右闭式写法左闭右开式写法 二分查找 题目 给定一个…

单步调试Linux内核论证水位线watermark

哈喽&#xff0c;我是子牙&#xff0c;一个很卷的硬核男人 深入研究计算机底层、Windows内核、Linux内核、Hotspot源码……聚焦做那些大家想学没地方学的课程。为了保证课程质量及教学效果&#xff0c;一年磨一剑&#xff0c;三年先后做了这些课程&#xff1a;手写JVM、手写OS…

互联网加竞赛 机器视觉人体跌倒检测系统 - opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 机器视觉人体跌倒检测系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&…
最新文章