C++八股学习心得.4

1.C++ 类 & 对象

C++ 在 C 语言的基础上增加了面向对象编程,C++ 支持面向对象程序设计。是 C++ 的核心特性,通常被称为用户定义的类型

用于指定对象的形式,它包含了数据表示法和用于处理数据的方法类中的数据和方法称为类的成员函数在一个类被称为类的成员函数

C++ 类定义

定义一个类,本质上是定义一个数据类型的蓝图类定义是以关键字 class 开头,后跟类的名称类的主体是包含在一对花括号中类定义后必须跟着一个分号或一个声明列表关键字 public 确定了类成员的访问属性在类对象作用域内,公共成员在类的外部是可访问的类外依然可以访问。您也可以指定类的成员为 private 或 protected

定义 C++ 对象

类提供了对象的蓝图,所以基本上,对象是根据类来创建的。声明类的对象,就像声明基本类型的变量一样类的对象的公共数据成员可以使用直接成员访问运算符 (.) 来访问。私有的成员和受保护的成员不能使用直接成员访问运算符 (.) 来直接访问

2.C++ 类成员函数 

类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员成员函数可以定义在类定义内部,或者单独使用范围解析运算符 :: 来定义。在类定义中定义的成员函数把函数声明为内联,即便没有使用 inline 标识符。也可以在类的外部使用范围解析运算符 :: 定义该函数在 :: 运算符之前必须使用类名。调用成员函数是在对象上使用点运算符(.),这样它就能操作与该对象相关的数据

3.C++ 类访问修饰符 

数据隐藏是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。成员和类的默认访问修饰符是 private

公有(public)成员

公有成员在程序中类的外部是可访问的您可以不使用任何成员函数来设置和获取公有变量的值

私有(private)成员

私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员默认情况下,类的所有成员都是私有的。没有使用任何访问修饰符,类的成员将被假定为私有成员实际操作中,我们一般会在私有区域定义数据,在公有区域定义相关的函数,以便在类的外部也可以调用这些函数

保护(protected)成员

保护成员变量或函数与私有成员十分相似,但有一点不同,保护成员在派生类(即子类)中是可访问的

4.C++ 类构造函数 & 析构函数 

类的构造函数

类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。

构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值

带参数的构造函数

默认的构造函数没有任何参数,但如果需要,构造函数也可以带有参数。这样在创建对象时就会给对象赋初始值,有参构造

类的析构函数

类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。

析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。

C++ 拷贝构造函数

系统为对象 B 分配了内存并完成了与对象 A 的复制过程。就类对象而言,相同类型的类对象是通过拷贝构造函数来完成整个复制过程的。

拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。

拷贝构造函数通常用于:

通过使用另一个同类型的对象来初始化新创建的对象。

复制对象把它作为参数传递给函数。

复制对象,并从函数返回这个对象。

如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。

5.C++ 友元函数 

类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend

6.C++ 内联函数

如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字 inline,在调用函数之前需要对函数进行定义。如果已定义的函数多于一行,编译器会忽略 inline 限定符。

类定义中的定义的函数都是内联函数,即使没有使用 inline 说明符。有了内联函数,就能像调用一个函数那样方便地重复使用一段代码,而不需要付出执行函数调用的额外开销。很显然,使用内联函数会是最终可执行程序的体积增加。以空间换取时间,或消耗时间来增加空间,

7.C++ this 指针

在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象

友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针

8.C++ 指向类的指针

一个指向 C++ 类的指针与指向结构的指针类似访问指向类的指针的成员,需要使用成员访问运算符 ->,就像访问指向结构的指针一样与所有的指针一样,您必须在使用指针之前,对指针进行初始化

9.C++ 类的静态成员

我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本

静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化,

如果把函数成员声明为静态的,就可以把函数与类的任何特定对象独立开来静态成员函数即使在类对象不存在的情况下也能被调用静态函数只要使用类名加范围解析运算符 :: 就可以访问。

静态成员函数只能访问静态数据成员不能访问其他静态成员函数和类外部的其他函数。

静态成员函数有一个类范围他们不能访问类的 this 指针您可以使用静态成员函数来判断类的某些对象是否已被创建

10.C++ 继承

面向对象程序设计中最重要的一个概念是继承继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行时间的效果。

创建一个类时,您不需要重新编写新的数据成员和成员函数只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类

继承代表了 is a 关系

总结:

面向对象编程,类用户可以自定义数据类型,类指定了对象形式,数据和数据处理方法都是类的成员,函数就是成员函数,类关键字class+名称+花括号,public共有属性类内类外都可以访问,private和protected私有属性和保护属性,对象根据类创建,共有属性数据可以直接使用.来进行访问

类成员函数是对成员数据进行操作,可以在类内定义,也可以使用::在类外定义,使用.来访问成员数据

访问修饰符:public,private,protected,如果没有指定那么默认则是private,public类内类外都可以访问,私有属性只有类和友元函数可以访问,类外不可访问,默认私有属性,一般情况私有属性定义数据,共有属性定义函数,保护属性与私有属性类似,只是派生类可以访问(继承)

构造函数成员函数,创建对象时候调用,构造函数名与类名完全相同,不会返回任何类型,默认是无参构造函数,有参构造就是在创建对象就给对象赋值,析构函数删除对象执行,函数名称与类名相同在前面加~,也不返回任何类型数据,拷贝构造函数使用创建过对象来创建新的对象,如果类内有指针,且有动态内存,需要定义拷贝构造

友元函数 是类外函数有权访问私有和保护成员,不是成员函数,函数是类的友元需要加friend关键字

内联函数需要关键字inline

c++this指针对象用来访问自己的地址,成员函数内部用来调用对象,成员函数有this指针

访问类的指针需要使用->来访问,指针使用的时候需要初始化

static可以使类的成员变为静态变量或者函数,只有一个副本,可以在类外利用::来重新声明静态变量对其进行初始化,静态成员函数::也可以访问,静态成员函数只能访问静态数据成员,不能访问其他静态成员函数和类外其他成员函数,不能使用this指针,

继承,依据一个类来定义一个类,不需重新创建成员函数和数据成员,指定新的类(派生类)来继承已有的类(基类)即可

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

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

相关文章

系列六、RestTemplate

一、RestTemplate 1.1、概述 RestTemplate是一种便捷的访问RestFul服务的模板类,是Spring提供的用于访问Rest服务的客户端模板工具集,它提供了多种便捷访问远程HTTP服务的方法。 1.2、API https://docs.spring.io/spring-framework/docs/5.2.2.RELEASE…

论文查重降重写成大白话可以吗

大家好,今天来聊聊论文查重降重写成大白话可以吗,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧,可以借助此类工具: 论文查重降重:用大白话解析 一、引言 写论文是每个…

斯坦福和 Meta学者发现Gemini在常识推理任务中有较强潜力;初学者GPT:Ai和LLM资源

🦉 AI新闻 🚀 斯坦福和 Meta学者发现Gemini在常识推理任务中有较强潜力 摘要:斯坦福和Meta的学者发表论文为Gemini正名,他们发现之前对Gemini的评估并不能完全捕捉到其真正的常识推理潜力。他们设计了需要跨模态整合常识知识的任…

【自动化测试】转行人员在面试中被问及计算机基础知识该怎么办?????(长文,预计三小时阅读)

看前提示,本文共4W字,76道题(附答案) 全部看完预计三个小时,如果觉得时间长,可以直接跳转到文末,有本文的word版提供下载 近些年软件测试岗位从转行的来人越来越多,占比高达44% 软件…

普中STM32-PZ6806L开发板(HAL库函数实现-访问多个温度传感器DS18B20)

简介 我们知道多个DS18B20的DQ线是可以被挂在一起的, 也就是一根线上可以访问不同的DS18B20而不会造成数据错乱, 怎么做到的,其实数据手册都有说到, 就是靠64-bit ROM code 进行识别, 也可以理解成Serial Number进行识别, 因为主要差异还是在Serial Numb…

每日好题:acwing:(走迷宫bfs的运用)好久没更新啦

走迷宫: 给定一个 nm 的二维整数数组,用来表示一个迷宫,数组中只包含 0 或 1,其中 0 表示可以走的路,1 表示不可通过的墙壁。 最初,有一个人位于左上角 (1,1)处,已知该人每次可以向上、下、左…

修改选择框el-select样式,显示及下拉样式

修改选择框el-select样式,显示及下拉样式 .el-input__inner {background: rgba(25, 126, 195, 0.2);border: none;color: #fff; }.el-select-dropdown {background: rgba(19, 73, 104, 0.79);border: 2px solid #48e3ff;border-radius: 0; }.el-popper .popper__arrow {display…

华硕ASUS RT-AC1200 pandavan老毛子 128M DDR固件

原版硬件只支持64M DDR2,更换了128M内存,结果找不到对应的固件,而且全部都是英文版的 所以自己编译了中文版的pandavan老毛子,下载位置可能资源审核中:

MT9201 1.2MHz,3V~24V输入高效增压白色LED驱动器 丝印B9HB

描述 MT9201是一个升压转换器,设计用于从单电池锂离子电池驱动多达7系列白色led。MT9201使用电流模式,固定频率结构来调节LED电流,它通过外部电流感测电阻器来测量。其低200mV反馈电压降低了功率损耗,提高了效率。MT9201包括欠电压…

富文本BraftEditor引起的bug

1、BraftEditor踩坑1 #基于之前写的一篇BraftEditor的使用# 1. 问题起源: 打开编辑弹窗--> 下面页面所示--> 当进行分类选择时候,就会报错,并且这个报错还不是一直都有,6次选择出现一次报错吧 2. 解决: 2.1 起…

MySQL概述

M y S Q L 概述 \huge{MySQL概述} MySQL概述 MySQL学习笔记 引入 什么是数据库? D \color{red}D Data B \color{red}B Base(DB),存储和管理数据的仓库。 使用的各种电子产品的网页,页面中的数据都是动态的&#xf…

python pillow(PIL)库使用介绍

Python 图像库向 Python 解释器添加了图像处理功能。 该库提供了广泛的文件格式支持、高效的内部表示和相当强大的图像处理功能。 核心图像库旨在快速访问以几种基本像素格式存储的数据。它应该为通用图像处理工具提供坚实的基础。 概述 Python 图像库将图像处理功能添加到…

MSE Serverless 正式商用,构建低成本高弹性的微服务架构

作者:问思 微服务架构充分提升了研发效率,解决了复杂业务系统的快速迭代问题。但随着业务及技术演进,各种微服务组件也愈发复杂。如何实现更敏捷的开发,降低微服务开发运维成本,做到全链路的弹性,保障整个…

Windows找不到文件‘chrome‘,请确定文件名是否正确后,再试一次。

本文主要记录遇到vscode运行HTML文件提示: Windows找不到文件‘chrome‘,请确定文件名是否正确后,再试一次。问题的解决办法。 目录 一、打开设置 二 、搜索Live Server Config (1)安装Live Server插件 &#xff0…

「数据结构」八大排序1

🎇个人主页:Ice_Sugar_7 🎇所属专栏:初阶数据结构 🎇欢迎点赞收藏加关注哦! 文章目录 🍉插入排序🍌直接插入排序🥝复杂度及稳定性 🍌希尔排序🥝预…

亚信安慧AntDB携核心业务系统数据库升级改造方案亮相“2023年国有企业应用场景发布会”

近日,亚信安慧AntDB数据库携核心业务系统数据库升级改造方案亮相“2023年国有企业应用场景发布会”。本次国有企业应用场景发布会由北京市国资委主办、中关村发展集团承办、中关村软件园公司协办,以“融通创新 智引未来”为主题,聚焦智慧城市…

虚拟机添加显示屏

1、关闭虚拟机,虚拟机在为关机的情况下,虚拟机设置->显示器->监视器 都是灰色的,不能设置; 2、虚拟机设置->显示器->监视器 “监视器数量” 设置为2 “拉伸模式” 不要勾选 点确定 3、点击 查看->循环使用多个…

解决SyntaxError: future feature annotations is not defined,可适用其他包

方法:对报错的包进行降级 pip install tikzplotlib0.9.8site-packages后面是使用pip install安装的包,根据这个找到报错的包 想法来源: 环境是python3.6,完全按照作者要求进行环境配置,但仍报错。 我在网上找的解决…

【Java基础篇】常见的字符编码、以及它们的区别

常见的字符编码、以及它们的区别 ✔️ 解析✔️扩展知识仓✔️Unicode和UTF-8有啥关系?✔️有了UTF-8,为什么要出现GBK✔️为什么会出现乱码 ✔️ 解析 就像电报只能发出 ”滴” 和 ”答” 声一样,计算机只认识 0 和 1 两种字符,但是&#x…

Sourcetree安装和配置

先了解Sourcetree是用来做什么的 简单说就是一个有可视化界面的Gti 用途: (1)克隆(clone):从远程仓库URL加载创建一个与远程仓库一样的本地仓库 提交(commit):将暂存文件上传到本地仓库(我们在Finder中对本…