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

news2024/9/20 8:10:48

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.coloradmin.cn/o/1471428.html

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

相关文章

input/textarea光标位置插入文字

需求是右边编辑sql时&#xff0c;点击左侧常量参数&#xff0c;直接在光标处插入对应的参数&#xff0c;大致实现代码如下&#xff1a; <input type"text" id"myInput" value"Hello, World!"> <button onclick"insertText()&qu…

一个基于 UWP 平台的第三方酷安客户端

前言 今天大姚给大家分享一款UWP平台开源的第三方酷安&#xff08;一个泛科技数码社区&#xff09;客户端应用&#xff1a;Coolapk UWP。 UWP介绍 UWP是Universal Windows Platform的缩写&#xff0c;即通用 Windows 平台。它是微软推出的一种应用程序开发平台&#xff0c;允…

第15章-IP子网划分

1. 子网划分的需求 1.1 早期的IP地址分类 1.2 产生的问题 1.3 现实的应用场景 2. IP子网划分基础知识 2.1 概念 2.2 子网掩码 3. IP子网划分相关计算 3.1 概述 4. VLSM和CIDR 4.1 VLSM(可变长子网掩码)小 → 大&#xff1b; 4.2 CIDR(无类域间路由)大 → 小&#xff1b; 5.…

[AutoSar]BSW_Com03 DBC详解 (一)

目录 关键词平台说明一、DBC 定义1.1 相关工具 二、主要组成部分介绍2.1 Networks2.2 ECUs2.3 Network nodes2.4 messages2.5 signal2.6 Value Tables 三、主要组成部分关系图 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector &am…

向量数据库的特性、索引和分析权衡

向量数据库概述 向量数据库的特征 数据库多样性&#xff1a;向量数据库在实现、性能、可扩展性和易用性方面存在差异&#xff0c;支持语义搜索应用。融资与地理位置&#xff1a;多数向量数据库初创公司集中在加州湾区&#xff0c;但资金并不直接反映数据库能力。编程语言&…

路由器端口映射如何配置?

在网络通信中&#xff0c;路由器是一个重要的设备&#xff0c;它负责将数据包从一个网络传输到另一个网络。路由器的端口映射配置是一种重要的设置&#xff0c;可以使外部网络中的计算机通过访问路由器上的特定端口与内部网络中的计算机进行通信。本文将介绍什么是路由器端口映…

Docker+Kafka+Kafka-ui安装与配置

前言 Docker、Kafka都是开发中常用到的组件。在自己的第三台电脑上去安装这些…所以写个博客记录一下安装过程。本文主要内容&#xff1a;Docker安装、kafka安装、kafka可视化配置。这次的电脑环境是Windows11&#xff0c;Intel处理器。 Docker安装 https://www.docker.com/p…

51单片机学习(5)-----蜂鸣器的介绍与使用

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 目录 一. 蜂鸣器的介绍 1.蜂鸣器介绍 2.压电式蜂鸣器 &#xff08;无源…

元学习(meta-learning)的通俗解释

目录 1、什么是元学习 2、元学习还可以做什么 3、元学习是如何训练的 1、什么是元学习 meta-learning 的一个很经典的英文解释是 learn to learn&#xff0c;即学会学习。元学习是一个很宽泛的概念&#xff0c;可以有很多实现的方式&#xff0c;下面以目标检测的例子来解释…

linux服务器vi文件中文乱码

服务器vi编辑中文乱码 cat 文本是中文 可以编辑 vi /etc/environment 文件修改为utf8中文字符集 LANGzh_CN.UTF-8 LANGUAGEen_US:en LC_CTYPE"zh_CN.UTF-8" LC_NUMERIC"zh_CN.UTF-8" LC_TIME"zh_CN.UTF-8" LC_COLLATE"zh_CN.UTF-8"…

ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘无密码如何解决

1.修改my.cnf配置文件 &#xff08;1&#xff09;找到my.cnf位置&#xff0c;在[mysqld]下面添加skip-grant-tables cd / vim /etc/my.cnf &#xff08;2&#xff09;添加完成后保存&#xff0c;并重启mysql服务 按下esc 输入:wq 执行 servcie mysqld restart 2.进入mysql数据…

2024年蓝牙耳机哪个好?五大口碑热门爆棚机型力荐!

​长时间的通勤或等待中&#xff0c;我喜欢戴着耳机静静地听音乐&#xff0c;享受那片刻的宁静。对我来说&#xff0c;耳机是生活中不可或缺的数码产品&#xff0c;无论是在路上还是在运动时&#xff0c;我都会随身携带。在这篇文章中&#xff0c;我将分享我对耳机的了解和使用…

【深度学习笔记】3_11 模型选择、欠拟合和过拟合

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;做了部分个人理解标注&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 3.11 模型选择、欠拟合和过拟合 在前几节基于Fashion-MNIST数据集的实验中&#xff0c;我们评价了机器学习模型在训练数据集和测试数…

OpenAI-Sora:最新文生视频教程-Sora怎么用(新手小白)

Sora 是什么&#xff1f; Open AI 宣布推出全新的生成式人工智能模型“Sora”。据了解&#xff0c;通过文本指令&#xff0c;Sora 可以直接输出长达 60 秒的视频&#xff0c;并且包含高度细致的背景、复杂的多角度镜头&#xff0c;以及富有情感的多个角色。 - 继文本、图像之后…

荣获国家高新技术企业认证,苹芯科技领航AI芯片产业发展

北京苹芯科技有限公司&#xff08;以下简称“苹芯科技”&#xff09;凭借在存算一体芯片领域的卓越表现&#xff0c;荣获国家高新技术企业认证。这一荣誉不仅是对苹芯科技多年来在科技创新、产品研发等方面所取得成果的肯定&#xff0c;更是对其未来发展潜力的认可。 苹芯科技…

解析OOM的三大场景,原因及实战解决方案

目录 一、什么是OOM 二、堆内存溢出&#xff08;Heap OOM&#xff09; 三、方法区内存溢出&#xff08;Metaspace OOM&#xff09; 四、栈内存溢出&#xff08;Stack OOM&#xff09; 一、什么是OOM OOM 是 Out Of Memory 的缩写&#xff0c;意思是内存耗尽。在计算机领域…

力扣思路题:丑数

此题的思路非常奇妙&#xff0c;可以借鉴一下 bool isUgly(int num){if(num0)return false;while(num%20)num/2;while(num%30)num/3;while(num%50)num/5;return num1; }

树-王道-复试

树 1.度&#xff1a; 树中孩子节点个数&#xff0c;所有结点的度最大值为 树的度 2.有序树&#xff1a; 逻辑上看&#xff0c;树中结点的各子树从左至右是有次序的&#xff0c;不能互换。 **3.**树的根节点没有前驱&#xff0c;其他节点只有一个前驱 **4.**所有节点可有零个或…

[Linux]文件基础-如何管理文件

回顾C语言之 - 文件如何被写入 fopen fwrite fread fclose fseek … 这一系列函数都是C语言中对文件进行的操作&#xff1a; int main() {FILE* fpfopen("text","w");char str[20]"write into text";fputs(str,fp);fclose(fp);return 0; }而上…

全域增长方法论:帮助品牌实现科学经营,助力长效生意增长

前两年由于疫情反复、供给需求收缩等条件制约&#xff0c;品牌业务均受到不同程度的影响。以双十一和618电商大促为例&#xff0c;就相比往年颇显“惨淡”&#xff0c;大多品牌营销都无法达到理想预期。 随着市场环境不断开放&#xff0c;2023年营销行业开始从低迷期走上了高速…