C++ - 类和对象(上)

目录

一、类的定义

二、访问限定符

public(公有)

protected(保护)

private(私有)

三、类声明和定义分离

四、外部变量和成员变量的区别与注意

五、类的实例化

六、类对象的模型

七、类的this指针

八、类中的构造函数

默认生成

用户自己写

九、析构函数

总结


前言

本章是类和对象的知识,主要是对面向对象和面向过程的区别,C语言是面向过程,那在C++中主要是关注在面向对象中。


一、类的定义

上一章中我们讲到C++是兼容C语言的,所以在C++兼容C语言里的struct的所有用法,struct同时也升级成类,类中升级有几点:
1. 类名就是类型,无需再使用typedef去重定义命名,使用类实例化时也无需再添加struct。

//旧
typedef struct stall{
//.......
}stall;
stuct stall a1;//或
stall a2;//新类
struct stall{
//.......
};
stall a;

2. 类里面可以定义函数了

struct Scom{void fun1(){//.....}void fun2(){//.....}void fun3(){//.....}
};

但是在c++中一般都是用class类定义类的,也很简单只需要将struct换成class即可。

//class为定义类的关键字,Classname为类的名字,{}为类的主体
class Classname{};

二、访问限定符

类中引入了访问限定符,有三种 public 、protected 、private 

public(公有)

意思是类外部是可以使用或访问以下的内容。

protected(保护)

protected与下面的private功能上目前区别不大,在后面学到继承就有区别,主要先学习private为准。

private(私有)

 private的功能在于限定类外不可访问,但是在类的内部可以访问,例:

这里可以看到给变量a进行了private限定符,类外部就不可访问了,那可以在类内部写个函数,让外部进行访问:

在功能上struct和class是一样的。
但是class默认是private,struct是public的,我们使用class类时,一般定义的成员变量都是私有的。

三、类声明和定义分离

当实现类声明与定义分离时,在定义中要指定类的域要带上 ::  例如:类 :: 函数

在一般情况下 .h 声明了也可以直接定义函数的,例:

在类里直接定义的话函数默认是inline内联函数,内联函数可以直接认为是用于优化程序的关键字。
那在一般情况下,我们长的函数就声明和定义分离,短小的函数可以直接在类里面定义。

四、外部变量和成员变量的区别与注意

我们在对类进行传参时,同名变量是不影响成员变量的数据的,但不建议变量与成员变量同名,因为不容易区分。

所以我们为了区分传参的变量与成员变量一般会在成员变量加上 _ ,例:_a就区别于a。

五、类的实例化

直接理解为给类实例一个对象,开辟一个空间。
例:class  Person{
        };
        main: Person a; <--实例化对象

六、类对象的模型

成员变量会独立存储在一个一块独立的对象空间中;
类成员函数会把函数放在一个公共区域,主要是因为空间的可循环利用空间。
类和结构体一样会内存对齐,占用空间规则一样。
内存对齐的知识点(面试会考)

七、类的this指针

在类函数内部用 this -> 变量是可以获取或修改类内的成员变量的,函数传参不可修改。
this 是指向类内部的成员变量
面试题
this 指针会存在哪个位置?
会在栈帧中,vs下会存到 exc 寄存器里。

八、类中的构造函数

构造函数有两种情况

默认生成

在没写构造函数的情况下,编译器会默认生成一个。
这里的默认生成是内置类型成员不做处理,自定义类型回去调用默认构造函数。

用户自己写

构造函数也可以用户自己编写一个,在用户写了构造函数后编译器不会再生成使用默认生成的构造函数。

默认构造有三种
1.不写构造函数
2.无参构造函数
3.全缺省调用
三种默认构造函数只能存在一种

总结,1.一般情况下,都要写上构造函数。2.如果成员都是自定义类型或声明时给了缺省值就可以无需在构造函数上定义好成员变量。

九、析构函数

析构函数与构造函数相反,构造函数是对成员变量空间的申请与赋值,那么析构函数就是对完全对象中资源的清理,而不是对对象的销毁。

一般普通变量是无需写析构函数,而向栈申请空间的成员变量写析构函数才有意义,销毁动态内存。
注意:1.析构函数名是在类名前加上字符 ~ 
           2.是无参无返回值的类型
           3.一个类只能有一个(如未写析构函数,系统会自动生成一个,不能重载析构函数)
           4.在对象的生命周期结束时,C++会自动调用析构函数
默认生成的析构函数,行为跟构造函数相似,内置类型成员是不会做任何的处理,但如果是自定义类型成员会去调用自己的析构函数。


总结

本章主要是简单讲解了类和对象的基本概念与用法,下一章会详讲类的重载等....知识点。

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

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

相关文章

好用的GPTs:指定主题搜索、爬虫、数据清洗、数据分析自动化

好用的GPTs&#xff1a;指定主题搜索、爬虫、数据清洗、数据分析自动化 Scholar&#xff1a;搜索 YOLO小目标医学方面最新论文Scraper&#xff1a;爬虫自动化数据清洗数据分析 点击 Explore GPTs&#xff1a; Scholar&#xff1a;搜索 YOLO小目标医学方面最新论文 搜索 Scho…

武汉星起航引领跨境电商新潮流,深耕平台助力创业者实现财富增长

在全球电商市场不断演进的时代背景下&#xff0c;跨境电商已经从一种新兴趋势演变成为商业领域的主流。亚马逊&#xff0c;作为全球电商巨头&#xff0c;更是以其庞大的用户基础和高效的运营体系&#xff0c;吸引着全球数以百万计的卖家纷纷入驻&#xff0c;共同探索这片充满商…

Set A Light 3D Studio中文--- 打造专业级3D照明效果

Set A Light 3D Studio是一款专业的灯光模拟软件&#xff0c;专为摄影师和电影制片人打造。它允许用户在计算机上模拟并预览各种布光效果&#xff0c;助力拍摄出真实、精准且具有艺术感的作品。软件提供了丰富的灯光和场景模型&#xff0c;用户可以灵活调整光源参数&#xff0c…

Django Ajax

【一】Json 【1】介绍 JSON&#xff08;javascript object otaition&#xff09;是一种轻量级的数据交换格式JSON使用了Javascript的一部分语法来定义其数据格式&#xff0c;但Json是独立于语言的Json采用完全独立于语言的文本格式&#xff0c;使得Json成为理想的数据交互语言…

ARIMA

一.数据平稳性与差分法 1.平稳性&#xff1a; 2.差分法&#xff1a; 错开时间点&#xff0c;使得数据可以平稳 原数据➡️一阶差分➡️二阶差分&#xff1a; 二、arima 1.自回归模型 2.移动平均模型 关注的是误差项的累积 3.arma p d(几阶差分&#xff09; q自己指定 4.总…

微信小程序button动态跳转到页面

微信小程序中如何动态的跳转到某个页面。 目录 1、首先在js文件中定义事件函数 2、在页面中进行传参调用 3、其它跳转方法简单说明 1、首先在js文件中定义事件函数 goto(e){const urle.currentTarget.dataset.url;wx.navigateTo({url: url})}, 2、在页面中进行传参调用 &l…

基于Java中的SSM框架实现考研指导平台系统项目【项目源码+论文说明】

基于Java中的SSM框架实现考研指导平台系统演示 摘要 应对考研的学生&#xff0c;为了更好的使校园考研有一个更好的环境好好的学习&#xff0c;建议一个好的校园网站&#xff0c;是非常有必要的。提供学生的学习提供一个交流的空间。帮助同学们在学习高数、学习设计、学习统计…

python usb与下位机 硬件通信

需求分析 上周接到一个需求 用usb和硬件连接 轮询读取usb中指定功能码的指定个数的数据并生成一个桌面程序 刚接到这个需求时 我第一时间想到的就是使用python去尝试 期间也踩了很多的坑 第一版效果如下 特此记录 环境搭建 首先第一点就是将所需要的库进行安装 这里是我这…

Qt——2D画图

基础画图函数 矩形 painter.drawRect(50,50,200,100); 圆角矩形 painter.drawRoundRect(50,50,200,200,50,50); xRadius和yRadius分别以矩形宽度和高度的一半的百分比指定&#xff0c;并且应该在0.0到100.0的范围内 弧线 painter.drawArc(50,50,200,200, -90*16, 90*16);…

探秘开源隐语:架构深度剖析与隐私计算技术之旅

1.隐语架构 隐语&#xff08;SecretFlow&#xff09;作为蚂蚁集团开源的可信隐私计算框架&#xff0c;其架构设计具有多层次的特点&#xff0c;虽然具体分层名称可能会根据实际描述略有差异&#xff0c;但我们可以依据已有的技术和信息对其进行结构化的拆解&#xff1a; 硬件层…

回归预测 | Matlab基于SAO-BiLSTM雪融算法优化双向长短期记忆神经网络的数据多输入单输出回归预测

回归预测 | Matlab基于SAO-BiLSTM雪融算法优化双向长短期记忆神经网络的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SAO-BiLSTM雪融算法优化双向长短期记忆神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SAO-B…

MySQL学习笔记------SQL(1)

关系型数据库&#xff08;RDBMS&#xff09; 建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库 特点&#xff1a;使用表储存数据&#xff0c;格式统一&#xff0c;便于维护 使用SQL语言操作&#xff0c;标准统一&#xff0c;使用方便 SQL通用语法 SQL…

反序列化漏洞简单知识

目录&#xff1a; 一、概念&#xff1a; 二、反序列化漏洞原因 三、序列化漏洞的魔术方法&#xff1a; 四、反序列化漏洞防御&#xff1a; 一、概念&#xff1a; 序列化&#xff1a; Web服务器将HttpSession对象保存到文件系统或数据库中&#xff0c;需要采用序列化的…

蓝桥杯day12刷题日记

P8720 [蓝桥杯 2020 省 B2] 平面切分 思路&#xff1a;首先借用dalao的图解释一下&#xff0c;又多出一条与当前平面任意一条直线都不重合线时&#xff0c;多了的平面是交点数1&#xff0c;所以用双层循环每次往里面加一条直线&#xff0c;计算交点 #include <iostream>…

STM32--RC522学习记录

一&#xff0c;datasheet阅读记录 1.关于通信格式 2.读寄存器 u8 RC522_ReadReg(u8 address) {u8 addr address;u8 data0x00;addr((addr<<1)&0x7e)|0x80;//将最高位置一表示read&#xff0c;最后一位按照手册建议变为0Spi_Start();//选中从机SPI2_ReadWriteByte(ad…

STM32之HAL开发——HAL库框架介绍

HAL库外设设计思想 HAL库借鉴面向对象的设计思想&#xff0c;将外设驱动封装为对象。 HAL库使用主线 HAL使用的主要用在俩个地方&#xff0c;无外乎外设初始化以及外设的使用。想用好这两个功能&#xff0c;我们首先得对外设的封装有一定的了解。 句柄结构体 xx_HandleTypeDef…

[Java基础揉碎]final关键字

目录 介绍 在某些情况下&#xff0c;程序员可能有以下需求&#xff0c;就会使用到final final注意事项和讨论细节 1) final修饰的属性又叫常量&#xff0c;一般用XX_XX_XX来命名 2) final修饰的属性在定义时&#xff0c;必须赋初值&#xff0c;并且以后不能再修改&#…

国内IP地址和网关的定义与作用

在国内网络通信系统中&#xff0c;IP地址和网关扮演着至关重要的角色&#xff0c;它们相互配合&#xff0c;构成了连接各种网络设备和实现数据传输的基础。虎观代理小二将深入探讨国内IP地址和网关的定义、作用以及在网络通信中的重要性。 1. IP地址的作用和特点 IP地址定义&am…

python绘图matplotlib——使用记录1

本博文来自于网络收集&#xff0c;如有侵权请联系删除 使用matplotlib绘图 1 常用函数汇总1.1 plot1.2 legend1.3 scatter1.4 xlim1.5 xlabel1.6 grid1.7 axhline1.7 axvspan1.8 annotate1.9 text1.10 title 2 常见图形绘制2.1 bar——柱状图2.2 barh——条形图2.3 hist——直…

python第三方库的安装,卸载和更新,以及在cmd下pip install安装的包在pycharm不可用问题的解决

目录 第三方库pip安装&#xff0c;卸载更新 1.安装&#xff1a; 2.卸载 3.更新 一、第三方库pip安装&#xff0c;卸载更新 1.安装 pip install 模块名 加镜像下载&#xff1a;pip install -i 镜像网址模块名 常用的是加清华镜像&#xff0c;如 pip install -i https://pyp…