从面向过程到面向对象

news2024/9/26 5:24:54

目录

1、抽象

2、UML类图

3、类定义

4、类成员函数

(1)构造函数(constructor)

(2)析构函数(destructor)

5、对象实现

6、封装

7、getter、setter方法


为什么要从面向过程转到面向对象?

随着计算机发展,问题场景越来越复杂,我们很难再描述每一个可能的过程

转而描述每一个实体(属性+行为),这就是面向对象的核心思想

1、抽象

识别出各个实体及其属性和行为,类就是对某一事物的抽象

下面以游戏为例来说明

属性:ID,段位,英雄,战力,场次...

行为:移动,放技能,普攻,回城,吃血包...

属性:名称,伤害,效果,价格,数量...

行为:购买,出售,合成...

OK,至此我们清楚了什么是抽象,以及区分类的属性和行为。

2、UML类图

用来规范描述一个事物的属性和行为

以上面的 “泣血之刃” 为例

 

数据成员属性后需要加上数据类型

属性、行为前的 + 和 -

+表示为public //公有成员

-表示为private //私有成员

3、类定义

定义一个类的成员变量和成员函数(语句同样以 ; 结尾)

类通过实例化成为真实存在的对象(存在于内存中)

我们使用关键字class来进行类定义


4、类成员函数

(1)构造函数(constructor)

对象实例化时,在分配的空间上构造对象,目的就是初始化对象

① 创建对象时自动调用

② 有默认的构造函数,并不是必须定义

③ 默认构造函数是无参的,也可以定义有参的

④ 可以有多个重载

⑤ 不可以有返回值

(2)析构函数(destructor)

对象生命期结束时,回收空间前,完成对象清理工作

① 一定无参数

② 不可以有返回值

③ 函数前有~(算是一个标志)

此外,构造函数和析构函数的函数名都必须和类名相同

5、对象实现

#include <iostream>
using namespace std;

class Circle {
public:
	float radius; //这里的radius是类的数据成员
	Circle(float radius)  //有参构造,括号里的radius为形式参数
	{
		this->radius = radius;  //this指针在类定义内部使用,指向当前对象
    }
float getS() {
	return 3.14 * radius* radius;
    }
};

int main()
{
	Circle Circle1(1.2); //实例化对象,一个圆的半径为1.2
	cout << Circle1.getS(); //访问对象成员,调用求面积的函数并输出结果
}

 

 

6、封装

将类的一些成员变量或方法藏起来,不允许外界直接操作(控制类成员在外部的可见性)

访问控制属性:

public:外部可通过 对象.名字 访问

protected

private:外部不可直接通过 对象.名字 访问

7、getter、setter方法

为某些私有成员提供外部读写方法,一般都是public

getter函数格式:

类型 get_XXX() const{

return XXX;

}

(通常设置为const函数,无参且有返回值)

setter函数格式:

void set_XXX(){

this->XXX=XXX;

}

(通常接受const参数,有参且无返回值)

来看例子,代码有点长,各位好好理解

#include <iostream>
using namespace std;

class Book {
private:
	string name;
	int count;
public:
	Book(string name) {
		count = 0;
		this->name = name;
	}
	int get_count() const {
		return count;
	}
	string get_name() const {
		return name;
	}
	void set_count(int count) {
		if (count < 0) {
			count = 0;
		}
		this->count = count;
	}
	void set_name(const string& name) {
		this->name = name;
	}
	void add_count() {
		count++;
	}
};
int main() {
 Book book1("高等数学");
		cout << book1.get_name() << "库存: " << book1.get_count() << endl;
		book1.add_count();
		cout << book1.get_name() << "库存: " << book1.get_count() << endl;
	}

8、this指针

在类成员函数定义内部使用,指向当前对象

利用this指针编写Student的有参构造函数,避免变量名覆盖问题:

Student(int id,string name,int age,float score){
this->id = id;  //由于形参名把数据成员名覆盖掉了,所以用this指针表明当前对象的数据成员
this->name = name;  
this->age = age;
this->score = score;
}

也可使用其他方式避免同名覆盖,如下 

Student(int _id, string _name, int_age, float _score){
id = _id;
name =_name;
age = _age;
score = score;
}

 这样就可以不用this指针

OK,今天内容到此为止,你学废了吗?

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

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

相关文章

C++实现ini配置文件解析——API设计

什么是配置文件 INI文件&#xff08;Initialization File&#xff09;是一种文本文件格式&#xff0c;通常用于存储配置数据。INI文件最初由Microsoft在Windows系统中引入&#xff0c;用于存储应用程序的配置信息。 INI文件的结构相对简单&#xff0c;由一系列的节&#xff0…

国外15家值得关注的AI创业公司

文 | 小戏、iven 星星之火&#xff0c;可以燎原。 在大模型横空出世的这个疯狂的春天&#xff0c;一场关于 AI 产品的革命也正在席卷全球。这边是大公司一个接一个模型搞军备竞赛&#xff0c;那边是各路豪强纷纷下场创业招兵买马。那么&#xff0c;除了咱们耳熟能详的 OpenAI 以…

数字化转型导师坚鹏:企业数字化营销

企业数字化营销 ————助力零售业务向批量化开发转变&#xff0c;对公业务向智慧化转变 课程背景&#xff1a; 很多企业存在以下问题&#xff1a; 不清楚数字化营销对企业发展有什么影响&#xff1f; 不知道如何提升企业数字化营销能力&#xff1f; 不知道企业如何开…

面试官:一千万的数据,你是怎么查询的

面试官&#xff1a;一千万的数据&#xff0c;你是怎么查询的&#xff1f; 前言 面试官&#xff1a;来说说&#xff0c;一千万的数据&#xff0c;你是怎么查询的&#xff1f;B哥&#xff1a;直接分页查询&#xff0c;使用limit分页。面试官&#xff1a;有实操过吗&#xff1f;B…

word@通配符@高级搜索查找@替换@中英文标点符号替换

文章目录 高级搜索通配符批量选中引用序号上标调整搜索替换作用范围设置&#x1f388;通过样式选择作用区域通过鼠标选择作用区域 高级替换操作顺序 标点符号替换&#x1f388;将英文逗号替换为中文逗号使用普通查找和替换&#xff1a;使用通配符替换 将英文句点替换为中文句号…

【Stable Diffusion】ControlNet基本教程(二)

接上篇【Stable Diffusion】ControlNet基本教程&#xff08;一&#xff09;&#xff0c;本篇介绍两个ControlNet常见的基本用法&#xff0c;更多用法欢迎关注博主&#xff0c;博主还会更新更多有趣的内容。 3.ControlNet基本用法 3.1漫画线稿上色 &#xff08;1&#xff09;上传…

Mysql索引(3):索引分类

1 索引分类 在MySQL数据库&#xff0c;将索引的具体类型主要分为以下几类&#xff1a;主键索引、唯一索引、常规索引、全文索引。 分类含义特点关键字主键索引针对于表中主键创建的索引 默认自动创建, 只能有一个 PRIMARY 唯一索引 避免同一个表中某数据列中的值重复可以有多…

Graph Embeddings—随机游走基本概念

Random Walk Approaches for Node Embeddings 一、随机游走基本概念 想象一个醉汉在图中随机的行走&#xff0c;其中走过的节点路径就是一个随机游走序列。 随机行走可以采取不同的策略&#xff0c;如行走的方向、每次行走的长度等。 二、图机器学习与NLP的关系 从图与NLP的…

【计算机网络】总结篇

【C语言部分】总结篇 【操作系统】总结篇 【数据库&#xff08;SQL&#xff09;】总结篇 本文目录 1. 简述网络七层参考模型及每一层的作用2. 简述静态路由和动态路由3. 说说有哪些路由协议&#xff0c;都是如何更新的4. 简述域名解析过程&#xff0c;本机如何干预域名解析5. 简…

智能算法系列之粒子群优化算法

本博客封面由ChatGPT DALLE 2共同创作而成。 文章目录 前言1. 算法思想2. 细节梳理2.1 超参数的选择2.2 一些trick 3. 算法实现3.1 问题场景3.2 python实现 代码仓库&#xff1a;IALib[GitHub] 前言 本篇是智能算法(Python复现)专栏的第三篇文章&#xff0c;主要介绍粒子群优化…

2023年的深度学习入门指南(9) - SIMD和通用GPU编程

2023年的深度学习入门指南(9) - SIMD和通用GPU编程 深度学习从一开始就跟GPU有不解之缘&#xff0c;因为算力是深度学习不可或缺的一部分。 时至今日&#xff0c;虽然多任务编程早已经深入人心&#xff0c;但是很多同学还没有接触过CPU上的SIMD指令&#xff0c;更不用说GPGPU…

【Segment Anything Model】论文+代码实战调用SAM模型预训练权重+相关论文

上篇文章已经全局初步介绍了SAM和其功能&#xff0c;本篇作为进阶使用。 文章目录 0.前言1.SAM原论文 1️⃣名词&#xff1a;提示分割&#xff0c;分割一切模型&#xff0c;数据标注&#xff0c;零样本&#xff0c;分割一切模型的数据集 2️⃣Introduction 3️⃣Task: prompta…

【五一创作】系统集成项目管理工程师-【11 人力资源】

持续更新。。。。。。。。。。。。。。。 【第十一章】人力资源 3分11.1 项目人力资源管理的定义及有关概念11.1.1 项日人力资源管理及其过程的定义2. 人力资源管理过程【掌握】11.1.2 人力资源管理相关概念11.2 编制项目人力资源管理计划11.2.1制定人力资源管理计划的技术和工…

IDEA编译报错:Error:java: 无效的源发行版: 17,一次搞定

出现这种错误的原因可能是&#xff1a; 1.本机默认使用&#xff08;编译&#xff09;的jdk与该项目所使用的jdk版本不同。 2.jdk版本不适用于这个Idea&#xff0c;很典型的一个例子就是使用的Idea是2020的&#xff0c;而你用到的jdk是17&#xff0c;jdk17是2021年推出的&#…

【K8S系列】深入解析Job

序言 你只管努力&#xff0c;其他交给时间&#xff0c;时间会证明一切。 文章标记颜色说明&#xff1a; 黄色&#xff1a;重要标题红色&#xff1a;用来标记结论绿色&#xff1a;用来标记一级论点蓝色&#xff1a;用来标记二级论点 Kubernetes (k8s) 是一个容器编排平台&#x…

UDP的报文结构

UDP 报文结构 基本上所有的教科书上都是这样画的图, 但实际上 UDP 报文结构不是这样的, 这样显示应该是容易排版. 正确应该如下图 : 端口号 : 每个端口号在 UDP 报文里占两个字节, 取值范围就是: 0 ~ 65535 源 ip 和源端口描述了数据从哪里来, 目的 ip 和目的端口描述了数据去哪…

操作系统基础知识介绍之指令集体系结构:RISC-V寄存器(掺杂与ARM和X86部分比对)

ra : 返回地址寄存器&#xff0c;用来保存函数或宏的返回地址 。 sp : 栈指针寄存器&#xff0c;用来指向栈顶的内存地址 。 gp : 全局指针寄存器&#xff0c;用来指向全局变量的内存地址 。 tp : 线程指针寄存器&#xff0c;用来指向线程局部变量的内存地址 。 t0 - t6 : 临时…

OpenGL加载模型 之网格

基础知识点 我们的工作就是去解析这些导出的模型文件&#xff0c;并将其中的模型数据存储为OpenGL能够使用的数据。一个常见的问题是&#xff0c;导出的模型文件通常有几十种格式&#xff0c;不同的工具会根据不同的文件协议把模型数据导出到不同格式的模型文件中。有的模型文…

【镜像取证篇】仿真碎片-记一次镜像仿真失败的复盘过程

【镜像取证篇】仿真碎片-记一次镜像仿真失败的复盘过程 这个是很久以前的一个镜像实验&#xff0c;当时仿真可以看到Windows的启动界面&#xff0c;但却一直无法正常进入系统&#xff0c;不断的尝试修复&#xff0c;都是显示错误&#xff0c;最后把类型改为IDE后&#xff0c;成…

ESP32-设备驱动TMP102数字温度传感器驱动

TMP102数字温度传感器驱动 文章目录 TMP102数字温度传感器驱动1、TMP102介绍2、硬件准备3、软件准备4、驱动实现1、TMP102介绍 TMP102 器件是一款数字温度传感器,非常适合需要高精度的 NTC/PTC 热敏电阻更换。 该器件提供 0.5C 的精度,无需校准或外部组件信号调理。 器件温度…