c++类与对象一

C++类与对象(一)

面向对象初步认识

在c语言中,编程是面向过程编程,注重求解问题列出过程,然后调用函数求解问题。

在日常生活中。我们经常会遇到面向过程的问题

手洗衣服就是面向过程

image-20240920104258079

而C++是基于面向对象的。关注的是对象,把事情拆分成多个不同的对象,靠对象与对象之间的交互。

在洗衣服整个过程分成四个对象:人、洗衣机、衣服、洗衣粉

人只需要把衣服和洗衣服丢进洗衣机,然后设定好洗衣机的洗涤步骤,就可以等待洗衣机把衣服洗了并甩干。

整个过程中,只有对象与对象的交互,人不需要关心衣服是怎么被洗干净并且甩干的。

image-20240920105346868

类的引入

在C语言中,如果我们写一个栈,就必须要用到struct结构体,而这里面只能定义变量。而在C++中,重新赋予了struct新的权力,就是也能在里面定义函数了。

typedef int DataType;
struct Stack
{//定义栈的变量DataType* _array;int _capacity;int _size;//栈初始化void Init(size_t capacity) {_array = (DataType*)malloc(sizeof(DataType) * capacity);if (_array) {perror("malloc fail");exit(-1);}_capacity = capacity;_size = 0;}//入栈void Push(const DataType& data) {_array[_size] = data;_size++;}//获取栈顶元素DataType Top() {return _array[_size - 1];}//销毁栈void Destory() {if (_array) {free(_array);_array = nullptr;_capacity = 0;_size = 0;}}
};int main() {Stack s;s.Init(10);s.Push(1);s.Push(2);s.Push(3);s.Top();s.Destory();return 0;
}

类的定义

在C++中,类的定义一般用class

class Myclass {//一般由成员变量和成员函数构成int _size;int capacity;void Init() {//......}
};//跟sturct一样,必须有分号

class是类关键字,Myclass是类名,可以自定义。

类中的内容称为类成员,内部变量称为成员变量,内部函数称为成员函数

类的两种定义方法

一、声明和定义全部放在类里面。注意:如果将函数的定义放在类里,编译器会将其当做内联函数处理。

class Myclass {public:int num;int size;//....public:int Add(int a, int b) {return a + b;}//内联函数//....
};

二、类声明放在头文件(.h)中,定义放在(.cpp)文件中。

类的声明

image-20240921104510110

class MyClass
{
public:int Add(int a, int b);//....public:int sum;int size;//....
};

类成员的定义

#include "test01.h"
int MyClass::Add(int a, int b) {return a + b;
}

注意:成员函数前必须加上类名

建议:在个人日常中写题目推荐第一种写法,在项目或者工作中,推荐第二种写法

成员变量命名规则建议

大家看下列函数,是不是非常的别扭,通过Time(int year,int month,int day)这个函数成员变量赋值,形参和实参完全相同,因此我们要重新给成员变量赋上新的命名规则(习俗)

class Date {public:int Time(int year, int month, int day) {year = year;month = month;day = day;}
private:int year;int month;int day;
};

在每个成员变量加上_就很容易看懂我们要给那一个变量赋值,提高代码可读性。

class Date {public:int Time(int year, int month, int day) {_year = year;_month = month;_day = day;}
private:int _year;int _month;int _day;
};

或者这样

class Date {public:int Time(int year, int month, int day) {Ayear = year;Amonth = month;Aday = day;}
private:int Ayear;int Amonth;int Aday;
};

总之,这些命名就是为了区分变量,从而提供可读性,因此可以根据自己的需求来命名。

类的访问限定及封装

访问限定符

image-20240921110405071

说明:

一、public修饰的成员,可以直接在类外面访问

二、protected和private修饰的成员在类外不能直接被访问(此处protected和private的作用是类似的)

三、权限访问限定作用域从该访问限定符出现的位置一直到下一个访问限定符出现位置

四、如果后面没有限定访问符,作用域到’}'(类结束为止)

五、class的默认权限是privatestruct默认的权限是public(class和struct的区别)

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

封装

封装本质上是一种管理,让用户更方便使用类。

在用户日常使用计算机的过程,通过计算机提供的USB接口,或键盘输入,显示器等交互来完成工作。而实际上,计算机中真正工作的是CPU、GPU等内部元件。

对于用户而言,不需要担心内部的部件,例如主板是如何布线的,CPU内部是如何工作的,用户只需要怎么开关机,怎么通过鼠标和键盘和计算机交互。在计算机出厂时,厂家通过机箱将这些封装好,把内部细节隐藏起来,仅仅对外提供USB接口、开关机按钮等交互接口就可以让用户和计算机交互。

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

类的作用域

类定义了一个新的作用域,使用类的所有成员,必须要加上类的作用域限定符::

头文件test01.h定义类

//test01.h
class Date {
public:int Time(int year, int month, int day);
private:int _year;int _month;int _day;
};

test01.cpp中声明类的成员

#include "test01.h"
int Date::Time(int year,int month,int day)
{Date::_year = year;Date::_month;Date::_day;
}

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

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

相关文章

html实现TAB选项卡切换

<!DOCTYPE html> <html> <head> <title>选项卡示例</title> <style> .tabs { overflow: hidden; /* 防止选项卡溢出容器 */ border: 1px solid #ccc; background-color: #f1f1f1; } .tab-links { margin: 0; padding: 0; l…

DataX-Web项目的Windows环境部署及基本使用

一,datax-web是什么? DataX Web 是一个在 DataX 基础上开发的分布式数据同步工具,它提供了一个简单易用的操作界面,旨在降低用户使用 DataX 的学习成本,缩短任务配置时间,并减少配置过程中的错误。DataX Web 支持多种数据源,包括 RDBMS、Hive、HBase、ClickHouse、Mongo…

yarn : 无法加载文件 C:\Users\Rog\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本

yarn : 无法加载文件 C:\Users\Rog\AppData\Roaming\npm\yarn.ps1&#xff0c;因为在此系统上禁止运行脚本 设置命令行窗口默认以管理员身份运行&#xff0c;在此基础上输入以下代码&#xff0c;应该就好使了&#xff0c;切记&#xff0c;以下代码才是关键&#xff0c;我基本上…

<刷题笔记> 力扣236题——二叉树的公共祖先

236. 二叉树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 题目解释&#xff1a; 我们以这棵树为例&#xff0c;来观察找不同的最近公共祖先有何特点&#xff1a; 思路一&#xff1a; 除了第二种情况&#xff0c;最近公共祖先满足&#xff1a;一个节点在他的左边&am…

犀牛数据爬虫逆向分析

目标网站 aHR0cHM6Ly93d3cueGluaXVkYXRhLmNvbS9pbmR1c3RyeS9uZXdlc3Q/ZnJvbT1kYXRh 一、抓包分析 请求参数和响应数据都有加密 二、逆向分析 1、请求参数 请求参数生成位置 数据解密涉及到一个异步栈 解密后的数据形式 剩下的就是扣取代码了&#xff0c;很简单&#xff0c;…

Class path contains multiple SLF4J bindings.

最近由于要改kafka成datahub&#xff0c;于是在pom文件上引入了 <dependency><groupId>com.aliyun.datahub</groupId><artifactId>aliyun-sdk-datahub</artifactId><version>2.25.1</version> </dependency> 然后让我去测试…

Linux 进程间通信(管道)

目录 一.理解进程间通信 1.进程间通信的意义 2.进程间如何实现通信呢&#xff1f; 二.匿名管道 1.匿名管道的底层原理 引用计数的应用 2.匿名管道代码实现 a.代码的整体框架 b.写接口 c.读接口 d.子进程资源回收 3.匿名管道的官方接口 4.*匿名管道四种情况和五种特…

【算法业务】互联网风控业务中的续贷审批模型(融合还款意愿分层的逾期风险识别模型)

1、背景说明 本文旨在提出一种针对风控催收受限情况下&#xff0c;如何提升风控审批模型的风险识别能力&#xff0c;以缓解贷后催收的压力&#xff0c;降低贷款资金坏账的风险。这篇工作依然是很早期的项目&#xff0c;分享的目的一方面做笔记&#xff0c;另一方面则是希望其中…

多类别物体检测系统源码分享

多类别物体检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

YOLO航拍车辆和行人识别

YOLO航拍车辆和行人识别 图片数量9695&#xff0c;标注为xml和txt格式&#xff1b; class&#xff1a;car&#xff0c;pedestrian&#xff0c;truck&#xff0c;bus 用于yolo&#xff0c;Python&#xff0c;目标检测&#xff0c;机器学习&#xff0c;人工智能&#xff0c;深度学…

LeetCode 热题 100 回顾18

干货分享&#xff0c;感谢您的阅读&#xff01;原文见&#xff1a;LeetCode 热题 100 回顾_力code热题100-CSDN博客 一、哈希部分 1.两数之和 &#xff08;简单&#xff09; 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标…

洛谷P5740——结构体运用

简单的结构体&#xff0c;但是要注意这个排序还有求和重复 时的特判 AC代码附在后面 #include<bits/stdc.h> using namespace std; struct Node{string name;int a,b,c,sum;//语文&#xff0c;数学&#xff0c;英语 }node[1000]; bool cmp(Node a,Node b){return a.sum…

三端全隔离压接端子485中继器磁耦隔离数据双向透传工业级2口信号放大器抗干扰防雷

美思联压接端子485中继器磁耦隔离工业级2口信号放大器抗干扰防雷https://item.taobao.com/item.htm?ftt&id736247434823 MS-H312S是一款专为工业自动化通信而生解决RS-485总线星型结构组网&#xff0c;解决复杂电磁场环境下RS-485大系统要求而设计的RS-485总线分割集线器(…

分布式网络存储技术是什么?分布式存储技术有哪些

分布式储存是指将数据分散存储在多个节点上的一种技术。但是你们知道分布式网络存储技术是什么&#xff1f;相比传统的集中式存储&#xff0c;分布式储存具有更高的可靠性和可用性。分布式网络存储是一种将数据分散存储在多个节点或服务器上的架构。 分布式网络存储技术是什么&…

【算法与数据结构复习】| 快速排序

今天刷力扣215.数组中第K个最大元素&#xff0c;题目要求用时间复杂度O(n)。因此跟着左程云算法课23复习了随机快速排序。 随机快速排序的核心思想就是在数组中随机选一个值x&#xff0c;把<x的值移到左边&#xff0c;>x的值移动到右边。x这个值必须在左边区间的最左边&a…

Java笔试面试题AI答之设计模式(3)

文章目录 11. Spring开发中的哪里使用了工厂设计模式 &#xff1f;1. BeanFactory2. 工厂方法模式3. 抽象工厂模式4. 示例说明总结 12. 什么是代理模式 &#xff1f;13. 请列举代理模式的应用场景 &#xff1f;14. 什么是原型模式 &#xff1f;15. 请简述Java中原型模式的使用方…

stm32 外部中断

1.每个IO都可以配置外部中断&#xff0c;中断的出发方式有上升沿、下降沿、双边沿。这个是在EXTI里配置。 2.所有IO总共分成了16组&#xff0c;&#xff08;PA0,PB0…&#xff09;、&#xff08;PA1,PB1…&#xff09;、&#xff08;PA2,PB2…&#xff09;,…,&#xff08;PA15…

【Proteus仿真】基于51单片机的电机调速和速度实时显示

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;可采用按键对电机进行方向的调控和速度的加减&#xff0c;并通过DAC0832设置放大电路进行对电机的设置&#xff0c;通过四位数码管显示电机转向和速度&#xff0c;非常精…

LLMs之PE:AI for Grant Writing的简介、使用方法、案例应用之详细攻略

LLMs之PE&#xff1a;AI for Grant Writing的简介、使用方法、案例应用之详细攻略 目录 AI for Grant Writing的简介 AI for Grant Writing的使用方法—提示资源 1、提示集合 2、提示工程 3、快速提示 为了提高文本清晰度 为了让文本更有吸引力 为了改进文本的结构和流…

变压器设备漏油数据集 voc txt

变压器设备漏油数据集 油浸式变压器通常采用油浸自冷式、油浸风冷式和强迫油循环三种冷却方式。该数据集采集于油浸式变压器的设备漏油情况&#xff0c;一般用于变电站的无人巡检&#xff0c;代替传统的人工巡检&#xff0c;与绝缘子的破损检测来源于同一课题。数据集一部分来自…