【Cpp】类和对象

标题:【Cpp】类和对象

@水墨不写bug


 


正文开始:

(一)面向过程与面向对象

        面向过程面向对象是两种不同的编程思想。

        面向过程指的是将程序分解成多个步骤,每个步骤都是一个独立的函数,通过函数之间的调用实现程序的功能。面向过程的程序设计着重于算法和步骤的顺序,将问题分解为一系列的步骤来解决。

        面向对象则是以对象为中心的编程思想。对象是数据和操作数据的函数组合而成的。面向对象的程序设计着重于对象之间的交互和关系,将问题分解为一组对象之间的协作。

        面向过程和面向对象的主要区别在于思考问题的角度和解决问题的方式。面向过程更加注重步骤和算法的实现,而面向对象更加注重对象之间的关系和交互。同时,面向对象的程序设计可以更好地实现封装、继承和多态等特性,使代码更加灵活和可复用。 

        举个例子:点外卖

面向过程,将从你下单点外卖到你拿到饭菜,到这一动作分成若干步骤:

        你下单——商家做饭——骑手取餐——商家骑手交接——骑手送餐——你拿到饭菜。 

而面向对象,就截然不同了。

        面向对象注重的是骑手,商家,顾客三个类实例化产生的对象之间的交互:你选择了哪个商家,商家输出产品,骑手输送产品等动作,都是实例化的对象的功能的体现。


(二)类 . Class

(1)认识类

        C语言的结构体中只能定义变量,不能定义函数。

        Cpp中规定结构体内可以定义函数,并用  class  代替  struct  来定义一个结构体,作为一个类的定义。

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

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

(2)类的两种定义方式

类的成员函数两种定义方式:
1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。
2. 类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加 “类名::”

(一般情况下,更期望采用第二种方式)

类的成员变量的定义方式:

1.为了区分一个类的成员变量和成员函数的形参,通常将成员变量前或者后加一个“_”;

class Date
{
public:void Init(int year){
//区分一个类的成员变量和成员函数的形参,通常将成员变量前或者后加一个“_”_year = year;}
private:int _year;
};

(3)类的访问限定符

        public,private,protected。

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

        1. public修饰的成员(成员函数或者成员变量)在类外可以直接被访问
        2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的);
        3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止;
        4. 如果后面没有访问限定符,作用域就到 } 即类结束;
        5. class的默认访问权限为private,struct为public(因为struct要兼容C);

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


(4)类的作用域 

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

class Person
{
public:void Print_person_info();
private:char name[50];char address[50];char gender[10];int age;char tel[15];
};//(类似于在另一个文件中定义类的成员时)
//在类体外定义成员时,需要使用 ::作用域操作符指明成员属于哪个类域。
void Person::Print_person_info()
{//..
}

(5)类的实例化

用类创建对象的过程称为类的实例化。

        类本质上也是一种数据类型,(如int,float,double等)只不过类是一种比较复杂的数据类型,它包含多种可自助实现的功能(类的成员函数)。

        既然类是和(如int,float,double等)相似的,那么也就意味着类本身是不占用内存空间的,而通过类实例化出来的对象是占用内存空间的

        但是一个类既包含了成员变量也包含了成员函数,那么占用的内存空间一定不小。如果我们实例化许多个对象,每个对象都会重复保存一份成员函数,不就造成了内存浪费吗?

i,如何计算类对象的大小

#include<iostream>
using namespace std;class A1 {
public:void f1(){}
private:int _a;
};
// 类中仅有成员函数
class A2 {
public:void f2() {}
};
// 类中什么都没有---空类
class A3
{};int main()
{cout<<sizeof(A1)<<" "<<sizeof(A2)<<" "<<sizeof(A3);return 0;
}

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


完~

未经作者同意禁止转载

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

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

相关文章

# notepad++ 编辑器英文版,如何打开自动换行

notepad 编辑器英文版&#xff0c;如何打开自动换行 在Notepad中&#xff0c;如果你想要开启自动换行功能&#xff0c;可以按照以下步骤操作&#xff1a; 1、打开 Notepad 编辑器。 1.1. 依次点击菜单栏中的【视图】&#xff0c;英文版对应【View】。1.2. 在【视图】下拉菜单…

自动化机器学习流水线:基于Spring Boot与AI机器学习技术的融合探索

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

51单片机两个中断及中断嵌套

文章目录 前言一、中断嵌套是什么&#xff1f;二、两个同级别中断2.1 中断运行关系2.2 测试程序 三、两个不同级别中断实现中断嵌套3.1 中断运行关系3.2 测试程序 总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 课程需要&#xff1a; 提示&#x…

结构分析的有限元法及matlab实现(徐荣桥)|【PDF教材+配套案例Matlab源码】

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

Luminar开始为沃尔沃生产下一代激光雷达传感器

在自动驾驶技术的浪潮中&#xff0c;激光雷达&#xff08;LiDAR&#xff09;传感器以其高精度和强大的环境感知能力&#xff0c;逐渐成为了该领域的技术之星。Luminar&#xff08;路安达&#xff09;公司作为自动驾驶技术的领军企业&#xff0c;近日宣布已开始为沃尔沃汽车生产…

OneFlow概念清单

ChatGPT OneFlow是一个开源的深度学习框架&#xff0c;它是由中国的一家公司——OneFlow Inc. 开发的&#xff0c;致力于提高大规模分布式训练的性能和效率。它提供了一种新颖的编程范式&#xff0c;旨在简化分布式系统的搭建过程&#xff0c;并提高资源的利用率。在OneFlow中…

Github Action Bot 开发教程

Github Action Bot 开发教程 在使用 Github 时&#xff0c;你可能在一些著名的开源项目&#xff0c;例如 Kubernetes&#xff0c;Istio 中看到如下的一些评论&#xff1a; /lgtm /retest /area bug /assign xxxx ...等等&#xff0c;诸如此类的一些功能性评论。在这些评论出现…

Web,Sip,Rtsp,Rtmp,WebRtc,专业MCU融屏视频混流会议直播方案分析

随着万物互联&#xff0c;视频会议直播互动深入业务各方面&#xff0c;主流SFU并不适合管理&#xff0c;很多业务需要各种监控终端&#xff0c;互动SIP硬件设备&#xff0c;Web在线业务平台能相互融合&#xff0c;互联互通&#xff0c; 视频混流直播&#xff0c;录存直播推广&a…

WPF之可翻转面板

1&#xff0c;创建翻转面板的资源字典&#xff1a;FlippPanel.xaml。 无外观控件同样必须给样式指定类型&#xff08; <ControlTemplate TargetType"ss:FlipPanel">&#xff09;&#xff0c;相关详情参考&#xff1a;WPF之创建无外观控件-CSDN博客&#xff09…

Django整合多种认证方式

承接上一篇&#xff1a;Django知识点总结-CSDN博客 目录 25.使用 Django REST framework实现用户认证和授权 26.通过djangorestframework-simplejwt使用JWT(JSON Web Token) 27.使用django-auth-ldap进行用户认证 28. 使用django-cas-ng实现集中认证及实现单点登录 29. …

关于海康相机和镜头参数的记录

对比MV-CS020-10UC和大家用的最多的MV-CS016-10UC 其实前者适合雷达站使用&#xff0c;后者适合自瞄使用 一&#xff1a;MV-CS020-10UC的参数 二&#xff1a;对比 三&#xff1a;海康镜头选型工具

EMP.DLL是什么东西?游戏提示EMP.DLL文件缺失怎么解决

emp.dll文件是Windows操作系统中的一种动态链接库文件&#xff0c;它被设计为可以被多个程序共享使用的模块化文件。这种设计旨在提高系统效率&#xff0c;减少内存消耗&#xff0c;并简化软件的维护和更新。DLL文件通常包含了一系列相关的函数和变量&#xff0c;这些函数和变量…

每日OJ题_DFS爆搜深搜回溯剪枝②_力扣526. 优美的排列

目录 力扣526. 优美的排列 解析代码 力扣526. 优美的排列 526. 优美的排列 难度 中等 假设有从 1 到 n 的 n 个整数。用这些整数构造一个数组 perm&#xff08;下标从 1 开始&#xff09;&#xff0c;只要满足下述条件 之一 &#xff0c;该数组就是一个 优美的排列 &#…

【人工智能基础】逻辑回归实验分析

实验环境&#xff1a;anaconda、jutpyter Notebook 实验使用的库&#xff1a;numpy、matplotlib 一、逻辑回归 逻辑回归是一个常用于二分类的分类模型。本质是&#xff1a;假设数据服从这个分布&#xff0c;然后使用极大似然估计做参数的估计。 二、实验准备 引入库、预设值…

如何与人沟通和交流技巧演讲(3篇)

如何与人沟通和交流技巧演讲&#xff08;3篇&#xff09; 如何与人沟通和交流技巧演讲&#xff08;三篇&#xff09; **篇&#xff1a;有效倾听&#xff0c;建立沟通基础 在与他人沟通和交流时&#xff0c;有效倾听是建立良好关系的基础。我们需要全神贯注地聆听对方的观点、…

[随记]Mac安装Docker及运行开源Penpot

下载Docker Desktop for Mac&#xff1a;https://www.docker.com/products/docker-desktop/ 安装Docker Desktop for Mac&#xff0c;安装完成后&#xff0c;启动Docker&#xff0c;然后在终端输入&#xff1a; docker version 在Mac电脑的Desktop&#xff0c;随便创建一个文…

深度学习:基于Keras,使用长短期记忆人工神经网络模型(LSTM)对股票市场进行预测分析

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…

AMBA-CHI协议详解(二)

《AMBA 5 CHI Architecture Specification》 文章目录 2.1 Channels综述2.2 Channel域段2.2.1 request fields2.2.2 Response fields2.2.3 Snoop request fields2.2.4 Data fields 2.3 事务结构2.3.1 Read transactions2.3.1.1 Allocating Read2.3.1.2 Non-allocating Read 2.…

RabbitMQ中的交换机类型

交换机类型 可以看到&#xff0c;在订阅模型中&#xff0c;多了一个exchange角色&#xff0c;而且过程略有变化&#xff1a; Publisher&#xff1a;生产者&#xff0c;不再发送消息到队列中&#xff0c;而是发给交换机 Exchange&#xff1a;交换机&#xff0c;一方面&#xff…

万兆以太网MAC设计(11)完整UDP协议栈仿真

文章目录 前言一、模块接口二、IP模块与ARP模块之间的联系三、整体协议栈仿真总结&#xff1a; 前言 目前除了巨帧处理逻辑之外&#xff0c;所有的准备工作都已经结束了&#xff0c;先进行整体的功能验证。 一、模块接口 所有模块接口皆采用AXIS数据流的形式&#xff0c;其中…