当前位置: 首页 > news >正文

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++会自动调用析构函数
默认生成的析构函数,行为跟构造函数相似,内置类型成员是不会做任何的处理,但如果是自定义类型成员会去调用自己的析构函数。


总结

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

相关文章:

C++ - 类和对象(上)

目录 一、类的定义 二、访问限定符 public&#xff08;公有&#xff09; protected&#xff08;保护&#xff09; private&#xff08;私有&#xff09; 三、类声明和定义分离 四、外部变量和成员变量的区别与注意 五、类的实例化 六、类对象的模型 七、类的this指针…...

mysql基础4sql优化

SQL优化 插入数据优化 如果我们需要一次性往数据库表中插入多条记录&#xff0c;可以从以下三个方面进行优化。 insert into tb_test values(1,tom); insert into tb_test values(2,cat); insert into tb_test values(3,jerry);-- 优化方案一&#xff1a;批量插入数据 Inser…...

实现Spring Web MVC中的文件上传功能,并处理大文件和多文件上传

实现Spring Web MVC中的文件上传功能&#xff0c;并处理大文件和多文件上传 在Spring Web MVC中实现文件上传功能并处理大文件和多文件上传是一项常见的任务。下面是一个示例&#xff0c;演示如何在Spring Boot应用程序中实现这一功能&#xff1a; 添加Spring Web依赖&#x…...

搭建vite项目

文章目录 Vite 是一个基于 Webpack 的开发服务器&#xff0c;用于开发 Vue 3 和 Vite 应用程序 一、创建一个vite项目二、集成Vue Router1.安装 vue-routernext插件2.在 src 目录下创建一个名为 router 的文件夹&#xff0c;并在其中创建一个名为 index.js 的文件。在这个文件中…...

Docker 安装mysql 主从复制

目录 1 MySql主从复制简介 1.1 主从复制的概念 1.2 主从复制的作用 2. 搭建主从复制 2.1 pull mysql 镜像 2.2 新建主服务器容器实例 3307 2.2.1 master创建 my.cnf 2.2.2 重启master 2.2.3 进入mysql 容器&#xff0c;创建同步用户 2.3 新建从服务器容器实例 3308…...

GPT每日面试题—如何实现二分查找

充分利用ChatGPT的优势&#xff0c;帮助我们快速准备前端面试。今日问题&#xff1a;如何实现二分查找&#xff1f; Q&#xff1a;如果在前端面试中&#xff0c;被问到如何实现二分查找&#xff0c;如果回答比较好&#xff0c;给出必要的代码示例 A&#xff1a;当被问到如何实…...

机器学习神经网络由哪些构成?

机器学习神经网络通常由以下几个主要组件构成&#xff1a; 1. **输入层&#xff08;Input Layer&#xff09;**&#xff1a;输入层接受来自数据源&#xff08;例如图像、文本等&#xff09;的原始输入数据。每个输入特征通常表示为输入层中的一个节点。 2. **隐藏层&#xff…...

代码随想录算法训练营day19 | 二叉树阶段性总结

各个部分题目的代码题解都在我往日的二叉树的博客中。 (day14到day22) 目录 二叉树理论基础二叉树的遍历方式深度优先遍历广度优先遍历 求二叉树的属性二叉树的修改与制造求二叉搜索树的属性二叉树公共最先问题二叉搜索树的修改与构造总结 二叉树理论基础 二叉树的理论基础参…...

数据库引论:3、中级SQL

一些更复杂的查询表达 3.1 连接表达式 拼接多张表的几种方式 3.1.1 自然连接 natural join&#xff0c;自动连接在所有共同属性上相同的元组 join… using( A 1 , A 2 , ⋯ A_1,A_2,\cdots A1​,A2​,⋯):使用括号里的属性进行自然连接&#xff0c;除了这些属性之外的共同…...

毕业设计:日志记录编写(3/17起更新中)

目录 3/171.配置阿里云python加速镜像&#xff1a;2. 安装python3.9版本3. 爬虫技术选择4. 数据抓取和整理5. 难点和挑战 3/241.数据库建表信息2.后续进度安排3. 数据处理和分析 3/17 当前周期目标&#xff1a;构建基本的python环境&#xff1a;运行爬虫程序 1.配置阿里云pytho…...

(一)基于IDEA的JAVA基础7

关系运算符 运算符 含义 范例 结果 等于 12 false &#xff01; 不等于 1&#xff01;2 true > 大于 1>2 false < 小于 …...

MySQL数据库概念及MySQL的安装

文章目录 MySQL数据库一、数据库基本概念1、数据2、数据表3、数据库4、数据库管理系统&#xff08;DBMS&#xff09;4.1 数据库的建立和维护功能4.2 数据库的定义功能4.3 数据库的操纵功能4.4 数据库的运行管理功能4.5 数据库的通信功能&#xff08;数据库与外界对接&#xff0…...

redis实际应用场景及并发问题的解决

业务场景 接下来要模拟的业务场景: 每当被普通攻击的时候&#xff0c;有千分之三的概率掉落金币&#xff0c;每回合最多爆出两个金币。 1.每个回合只有15秒。 2.每次普通攻击的时间间隔是0.5s 3.这个服务是一个集群&#xff08;这个要求暂时不实现&#xff09; 编写接口&…...

考研数学|汤家凤《1800》基础部分什么时候做完?

从我个人的经验来看&#xff0c;做完汤家凤1800的基础部分在第一轮复习中并不是必须的&#xff0c;但是可以作为一个有效的复习工具。 我认为汤家凤1800的基础部分确实涵盖了考研高数的基础知识点&#xff0c;并且题目难度适中&#xff0c;适合用来巩固基础。在第一轮复习中&a…...

JS的设计模式(23种)

JavaScript设计模式是指在JavaScript编程中普遍应用的一系列经过验证的最佳实践和可重用的解决方案模板&#xff0c;它们用来解决在软件设计中频繁出现的问题&#xff0c;如对象的创建、职责分配、对象间通信以及系统架构等。 设计模式并不特指某个具体的代码片段&#xff0c;…...

[自研开源] MyData v0.7.5 更新日志

开源地址&#xff1a;gitee | github 详细介绍&#xff1a;MyData 基于 Web API 的数据集成平台 部署文档&#xff1a;用 Docker 部署 MyData 使用手册&#xff1a;MyData 使用手册 试用体验&#xff1a;https://demo.mydata.work 交流Q群&#xff1a;430089673 介绍 MyData …...

3月份的倒数第二个周末有感

坐在图书馆的那一刻&#xff0c;忽然感觉时间的节奏开始放缓。今天周末因为我们两都有任务需要完成&#xff0c;所以就选了嘉定图书馆&#xff0c;不得不说嘉定新城远香湖附近的图书馆真的很有感觉。然我不经意回想起学校的时光&#xff0c;那是多么美好且短暂的时光。凝视着窗…...

Java 变得越来越像 Rust

Java 变得越来越像 Rust 介绍 随着编程的增强和复杂性越来越流行&#xff0c;许多编程语言也相互效仿。 Java 也不例外。 尽管社区内部存在问题&#xff0c;Rust 仍逐年赢得了开发人员的喜爱。并且有充分的理由&#xff1a;由于编译器&#xff0c;Rust 使开发人员能够避免整…...

通过git bash 或命令行ssh访问服务器 sftp上传下载文件

上传下载文件 sftp -P 端口 appywIP 示例&#xff1a;sftp -P 10022 appyw25.222.133.222 然后输入密码即可 ls 查看文件 lls 查看本地文件 cd 跳转 lcd 本地跳转 get ... 下载文件 put 本地文件名 远程文件夹 //上传文件 put -r 本地文件夹 远程文件夹 //上传文件夹服务器…...

27 OpenCV 凸包

文章目录 概念Graham扫描算法convexHull 凸包函数示例 概念 什么是凸包(Convex Hull)&#xff0c;在一个多变形边缘或者内部任意两个点的连线都包含在多边形边界或者内部。 正式定义&#xff1a; 包含点集合S中所有点的最小凸多边形称为凸包 Graham扫描算法 首先选择Y方向最低…...

别再傻傻用IP了!用Kali+SET克隆真实网站的完整避坑指南

KaliSET钓鱼网站进阶实战&#xff1a;从克隆到高仿的避坑指南 在网络安全测试中&#xff0c;钓鱼网站的真实性直接决定了测试效果。很多初学者止步于简单的IP访问和基础模板克隆&#xff0c;却忽略了细节打磨的重要性。本文将带你突破基础操作&#xff0c;实现从"一眼假&q…...

TRO组团和解中,快至1天谈好

以下案件组团和解中26-cv-269026-cv-315226-cv-046726-cv-287026-cv-192826-cv-180626-cv-304226-cv-2867...

西门子200Smart PLC的Modbus RTU主站自动轮询库:简化你的工业通信

西门子200Smart modbus rtu主站自动轮询库 used管脚为启用&#xff0c;其它管脚和西门子自带的指令一样使用及功能&#xff0c;调用后就不需要关心modbus轮训&#xff0c;功能块自己处理&#xff0c;简化200smart在工业自动化领域&#xff0c;Modbus RTU协议依然是设备之间通信…...

python绘制智能网格天气预报产品

python绘制智能网格天气预报产品 1.产品说明 智能网格天气预报业务化下发产品包括&#xff1a; PRE/GUST/FOG/HZ/SNOW/TMAX/TMIN/VIS/R24/RH/CLOUD/TA/TMP/WIN/PRS/TCC/SAND/SOIL/SUNLIGHT/HOURS: 固定代码&#xff0c;表示产品内容是降水/阵风/雾/霾/积雪/最高气温/最低气温…...

学习记录:从零开始学AI(二)——Scikit-learn加州房价机器学习例子学习笔记:继续补全代码运行成功

后记&#xff1a;之前一直以为用的是TensorFlow&#xff0c;原来我用的是 Scikit-learn。两者都可以实现机器学习。前者更适合实现深度神经网络。更正题目。已经搭建好环境&#xff0c;开始学习加州房价机器学习例子&#xff0c;目标理解相关概念&#xff0c;掌握机器学习例子开…...

Lepton AI农业监测:作物生长分析服务构建实践

Lepton AI农业监测&#xff1a;作物生长分析服务构建实践 【免费下载链接】leptonai A Pythonic framework to simplify AI service building 项目地址: https://gitcode.com/gh_mirrors/le/leptonai Lepton AI是一个Pythonic框架&#xff0c;专为简化AI服务构建而设计&…...

利用快马平台五分钟搭建openmaic网页版图像描述演示原型

最近在调研多模态AI框架时&#xff0c;发现OpenMAIC这个开源项目很有意思。它整合了视觉理解和文本生成能力&#xff0c;特别适合做图像描述这类应用。不过对于想快速验证效果的新手来说&#xff0c;本地部署整套环境还是有点门槛。正好发现InsCode(快马)平台能极速搭建演示原型…...

SEO_避开这些SEO误区,让你的优化工作事半功倍(287 )

SEO误区一&#xff1a;关键词堆砌 在SEO优化中&#xff0c;关键词的使用是非常重要的&#xff0c;但是不少人在操作时会犯一个非常严重的错误&#xff0c;那就是关键词堆砌。关键词堆砌不仅让内容显得冗长无味&#xff0c;更容易让搜索引擎怀疑你在进行黑帽SEO&#xff0c;从而…...

从231MB到69.5MB:我是如何优化Emby信息推送Docker镜像体积的(Python Alpine实战)

从231MB到69.5MB&#xff1a;Python Alpine实战中的Docker镜像瘦身艺术 在资源受限的云环境或边缘设备上部署服务时&#xff0c;Docker镜像体积直接决定了部署效率和资源利用率。一个典型的场景是&#xff1a;当你在凌晨三点通过SSH连接到树莓派部署更新时&#xff0c;发现需要…...

SEO_2024年最有效的SEO策略与方法深度解析

2024年最有效的SEO策略与方法深度解析 在当今数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;仍然是提升网站流量和品牌知名度的关键。2024年&#xff0c;随着搜索引擎算法的不断更新和用户行为的变化&#xff0c;SEO策略与方法也在不断演变。本文将深入解析2…...