【C++】类与对象(类章节)

面向过程和面向对象

C语言面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。

C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完 成。


一、类

1.类的引入

C语言结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。比如: 之前在数据结构初阶中,用C语言方式实现的栈,结构体中只能定义变量;现在以C++方式实现, 会发现struct中也可以定义函数。

结构体的定义,在C++中更喜欢用class来代替。

2.类的定义

class className
{
// 类体:由成员函数和成员变量组成
};  // 一定要注意后面的分号

class为定义类的关键字ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分 号不能省略。 类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者 成员函数。

2.1类的两种定义方式:一般情况下,更期望采用第二种方式。

工 作中尽量使用第二种。
2.1.1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内 联函数处理。

2.1.2 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名::

2.2成员变量命名规则的建议:

class Date
{
public:void Init(int year){_year = year;}
private:int _year;
};
// 或者这样
class Date
{
public:void Init(int year){mYear = year;}
private:int mYear;
};
// 其他方式也可以的,主要看公司要求。一般都是加个前缀或者后缀标识区分就行。

3.类的访问限定符及封装

3.1访问限定符

C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选 择性的将其接口提供给外部的用户使用。

【访问限定符说明】

1. public修饰的成员在类外可以直接被访问

2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)

3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止

4. 如果后面没有访问限定符,作用域就到 } 即类结束。

5. class的默认访问权限为private,struct为public(因为struct要兼容C)

注意:

访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别

3.2C++中struct和class的区别是什么?

解答:

C++需要兼容C语言,所以C++中struct可以当成结构体使用。另外C++中struct还可以用来 定义类。和class定义类是一样的,区别是struct定义的类默认访问权限是public,class定义的类 默认访问权限是private。

注意:

在继承和模板参数列表位置,struct和class也有区别,后序介绍。

3.2 封装

面向对象的三大特性:封装、继承、多态。

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来 和对象进行交互。

封装本质上是一种管理,让用户更方便使用类。

4.类的作用域

类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 :: 作用域操作符指明成员属于哪个类域。

5.类对象的存储方式

存储大小为成员变量的大小总和,

我们再通过对下面的不同对象分别获取大小来分析看下

// 类中既有成员变量,又有成员函数
class A1 {
public:void f1(){}
private:int _a;
};
// 类中仅有成员函数
class A2 {
public:void f2() {}
};
// 类中什么都没有---空类
class A3
{};

sizeof(A1) : ______ sizeof(A2) : ______ sizeof(A3) : ______

结论:

一个类的大小,实际就是该类中”成员变量”之和,当然要注意内存对齐注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类的对象。

6.结构体内存对齐规则

对齐规则

1. 第一个成员在与结构体偏移量为0的地址处。
2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。 VS中默认的对齐数为8
3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。
4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整 体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

内存结构题

1. 结构体怎么对齐? 为什么要进行内存对齐?
2. 如何让结构体按照指定的对齐参数进行对齐?能否按照3、4、5即任意字节对齐?
3. 什么是大小端?如何测试某台机器是大端还是小端,有没有遇到过要考虑大小端的场景

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

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

相关文章

【MySQL基本查询(上)】

文章目录 一、多行插入 指定列插入数据更新表中某个数据的信息(on duplicate)了解affected报告信息 二、检索功能1.select 查询1.1全列查询1.2指定列查询1.3where条件筛选子句案例 2.结果排序案例 3.筛选分页结果offset实现分页 一、多行插入 指定列插…

axios配置 responseType: “blob“

在使用 Axios 进行网络请求时,配置 responseType: "blob" 是用来指示 Axios 将响应体作为 Blob 对象处理。这在文件下载功能中特别有用,因为 Blob 对象可以被用来创建一个指向该文件内容的 URL,进而触发浏览器的下载行为或者在页面…

融入新科技的SLM27211系列 120V, 3A/4.5A高低边高频门极驱动器兼容UCC27284,MAX15013A

SLM27211是高低边高频门极驱动器,集成了120V的自举二极管,支持高频大电流的输出,可在8V~17V的宽电压范围内驱动MOSFET,独立的高、低边驱动以方便控制,可用于半桥、全桥、双管正激和有源钳位正激等拓。有极好的开通、关…

Python入门系列-02 pip的安装

目录 一、pip介绍二、pip安装检查三、pip安装 一、pip介绍 pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。 二、pip安装检查 你可以通过以下命令来判断是否已安装。 pip --version # Python2.x 版本命令 pip3 --versio…

新能源汽车为什么容易自燃

新能源汽车容易自燃的原因: 电池特性: 新能源汽车通常采用锂离子电池作为能源存储装置,这种电池具有高能量密度和高功率特性,但同时也存在一定的安全隐患。锂离子电池在受到损坏、过充、过放、过热或短路等情况下,可能…

二叉树的广度优先遍历 - 华为OD统一考试(D卷)

OD统一考试(D卷) 分值: 200分 题解: Java / Python / C++ 题目描述 有一棵二叉树,每个节点由一个大写字母标识(最多26个节点)。 现有两组字母,分别表示后序遍历(左孩子->右孩子->父节点)和中序遍历(左孩子->父节点->右孩子)的结果,请输出层次遍历的结…

《前端算法宝典:双指针问题解析与应用》

双指针 双指针,指的是在遍历对象的过程中使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针或者是两个指针构成一个滑动窗口进行扫描,从而达到相应的目的。 双指针方法在某些情况下可以对有序数组…

IDM下载器激活

文章目录 1、Internet Download Manager简介2、Internet Download Managery应用3、Internet Download Managery下载 1、Internet Download Manager简介 Internet Download Manager (IDM) 是一款功能强大的下载管理软件,旨在帮助用户更高效地管理和加速其下载任务。它…

【ITK配准】第十三期 FEM可变形配准样例

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享ITK配准中的FEM可变形配准样例,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO FEM可变形配准…

产业互联网助力预制菜出海 云创科技数据资产入表获批融资500万 新能源装备新质供应链创新协同平台启动 | 产业互联网观察第173期

产业互联网助力预制菜迈向国际市场 在第135届广交会上,一场聚焦“产业互联网赋能预制菜出海”的高端对话会隆重举办。本次活动由中国食品土畜进出口商会主办,云食界网络科技有限公司承办,吸引了众多政府领导、行业专家和企业代表参与。各界共…

MATLAB模拟退火算法、遗传算法、蚁群算法、粒子群算法

概况 模拟退火算法、遗传算法、蚁群算法、粒子群算法等算法,都是属于概率算法,不绝对,不迅速,能用其它方式解决的问题,不要用这些相对复杂的算法,比如有明确的线性关系或者非线性对应关系。这里的概率算法…

流程详解!2024年成都市发明专利申请流程及各阶段操作要点

一、受理阶段 时间期限: 电子申请2天内,纸质申请当天现场提交,邮寄约为半月。 申请人: 1. 委托专利代理机构,签订委托代理协议和保密协议等; 2. 提供原始技术资料和个人以及单位信息等; 3…

对于新开发完成的软件来说,做测试需求管理时有哪些难点系带我们解决?

随着互联网行业的进一步发展,时下新推一个项目或业务,复杂性明显大大提升,需求管理再也不单单是做简单的做个记录,然后做个需求文档管理了。因为,随着互联网企业的进一步升级,需求管理中更重要的是体现团队…

解决ssh使用服务器运行代码时中断问题

https://www.cnblogs.com/mchina/archive/2013/01/30/2880680.htmlhttps://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html

【JavaWeb】Servlet+JSP+EL表达式+JSTL标签库+Filter过滤器+Listener监听器

需要提前准备了哪些技术,接下来的课才能听懂? JavaSE(Java语言的标准版,Java提供的最基本的类库) Java的开发环境搭建Java的基础语法Java的面向对象数组常用类异常集合多线程IO流反射机制注解Annotation… MySQL&…

经常睡不好觉?试试用上华为手环9新升级的睡眠监测功能

睡眠问题是不是经常困扰着你呢?听说,华为手环9的睡眠监测功能升级了,无论是入睡前、睡眠中还是睡醒后,都能够帮助我们改善睡眠,让我们告别糟糕的睡眠质量! 睡觉前,打开华为手环9的睡眠模式&…

图表控件LightningChart .NET中文教程 - 创建3D网格模型实时着色应用

LightningChart.NET完全由GPU加速,并且性能经过优化,可用于实时显示海量数据-超过10亿个数据点。 LightningChart包括广泛的2D,高级3D,Polar,Smith,3D饼/甜甜圈,地理地图和GIS图表以及适用于科学…

住房“以旧换新”,后续需要关注啥?

政治局会议提出对房地产“消化存量、优化增量”,地产政策重心或转向去库存,各地住房“以旧换新”政策引发关注。“以旧换新”分为国企收购、市场化交易、购房补贴三种模式,其中国企收购政策力度较大,消化商品房库存增加保障房供给…

【springboot】整合oauth2.0和security,使用图形验证码和邮箱验证码登录

思路 当使用OAuth和Security框架(如Spring Security)进行登录,并且不使用密码而使用验证码时,生成Token的过程通常涉及以下几个步骤: 1.验证码生成与验证: 首先,系统会生成一个图形验证码并将其展示给用户。 用户输入他们看到的验证码。 系统验证用户输入的验证码是否…

杭州全面取消住房限购:楼市政策调整的深意与影响

近日,杭州市政府宣布全面取消住房限购政策,这一决定立即在房地产市场引起了广泛关注。此次政策调整是杭州市响应国家关于房地产市场健康发展的要求,促进市场平稳健康发展的重要举措。 杭州作为中国东部沿海的重要城市,一直以来都…