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

C++ 类和对象(一)

1.面向过程和面向对象初步认识

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

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

 

 

 

2.类的引入

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

 

3.类的定义

        class为定义类的关键字ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。

        类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。

类的两种定义方式:

        1. 声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。

 

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

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

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

        4.1 访问限定符

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

【访问限定符说明】

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

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

 

        4.2 封装

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

        在类和对象阶段,主要是研究类的封装特性,那什么是封装呢?

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

        封装本质上是一种管理,让用户更方便使用类。比如:对于电脑这样一个复杂的设备,提供给用户的就只有开关机键、通过键盘输入,显示器,USB插孔等,让用户和计算机进行交互,完成日常事务。但实际上电脑真正工作的却是CPU、显卡、内存等一些硬件元件。

        在C++语言中实现封装,可以通过类将数据以及操作数据的方法进行有机结合通过访问权限来隐藏对象内部实现细节,控制哪些方法可以在类外部直接被使用。

 

 

5.类的作用域

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

声明和定义分开时,定义函数时就要指明所定义的函数在那个类域。

6.类的实例化

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

1. 类是对对象进行描述的,是一个模型一样的东西,限定了类有哪些成员,定义出一个类并没
有分配实际的内存空间来存储它,(类就像一个图纸,仅仅告诉你有什么,但这些高楼大厦还没有建出来);比如:入学时填写的学生信息表,表格就可以看成是一个类,来描述具体学生信息。

2. 一个类可以实例化出多个对象,实例化出的对象 占用实际的物理空间,存储类成员变量

Person类是没有空间的,只有Person类实例化出的对象才有具体的年龄。

3. 做个比方。类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设
计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象
才能实际存储数据,占用物理空间。

 a1是被实例化了,可以访问其中内容。但是不可以用Date进行访问。

 

http://www.lryc.cn/news/188106.html

相关文章:

  • rust函数
  • 链表的基本操作
  • Flutter AI五子棋
  • springboot项目中后台文件上传处理
  • 【SQL】MySQL中的存储引擎、事务、锁、日志
  • DRM全解析 —— CRTC详解(2)
  • 3d环形图开发(vue3+vite+ts)
  • element ui中父子组件共用一个el-dialog弹窗,切换组件页面弹窗进行关闭
  • 基于Keil a51汇编 —— Segments, Modules, and Programs
  • 基于Java+SpringBoot+Vue民宿管理系统的设计与实现 前后端分离【Java毕业设计·文档报告·代码讲解·安装调试】
  • 【Qt】三种方式实现抽奖小游戏
  • 【算法与数据结构】--算法基础--算法设计与分析
  • vue部分入门知识点代码示例
  • 【图灵】Spring为什么要用三级缓存解决循环依赖问题
  • bert入门
  • 蓝桥杯基础---切面条
  • Spring Data Redis使用方式
  • HarmonyOS/OpenHarmony原生应用开发-华为Serverless认证服务说明(二)
  • 华为数通方向HCIP-DataCom H12-831题库(多选题:241-259)
  • 深度学习在 NumPy、TensorFlow 和 PyTorch 中实现所有损失函数
  • 超低延时直播技术演进之路-进化篇
  • 相机坐标系之间的转换
  • jvm--对象实例化及直接内存
  • 【数据结构与算法】如何对快速排序进行细节优化以及实现非递归版本的快速排序?
  • 【电商API接口的应用:电商数据分析入门】初识Web API(一)
  • 大运新能源天津车展深度诠释品牌魅力 为都市人群打造理想车型
  • 深入浅出:react高阶成分(HOC)的应用
  • 分库分表(3)——ShardingJDBC实践
  • Xcode 15下,包含个推的项目运行时崩溃的处理办法
  • 《安富莱嵌入式周报》第324期:单对以太网技术实战,IROS2023迪士尼逼真机器人展示,数百万模具CAD文件下载,闭环步进电机驱动器,CANopen全解析