C++之类

目录

一:面向过程和面向对象的初步认识

二:类的引入

三:类的定义

3.1类的两种定义方式:

3.2成员变量命名的建议

四:类的访问限定符及封装

4.1类的访问限定符

4.2封装


一:面向过程和面向对象的初步认识

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

比如:对于洗衣服

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

 


二:类的引入

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

struct Stack
{void Init(int n = 4){a = nullptr;size = capacity = n;}void Push(DataType x){if (size == capacity){int newCapacity = capacity * 2;int* tmp = (int*)realloc(a,sizeof(int) * newCapacity);if (tmp == nullptr){perror("realloc fail");return;}a = tmp;capacity = newCapacity;}a[size++] = x;}DataType Top(){return a[size - 1];}void Destroy(){free(a);a = nullptr;size = capacity = 0;}DataType* a;int capacity;int size;
};

上面的结构体定义,C++中更喜欢用 class来替代


三:类的定义

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

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

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

3.1类的两种定义方式

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

//声明和定义全部放在类体中
//人
class Person
{
//公开
public://显示基本信息void showInfo(){//......}
public:char* name;char* sex;int age;
};

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

类也是一种域,可以将{}括起来的都当成是一个域

类域作用:对成员变量进行保护,也可以进行名字隔离

一般情况下,更期望使用第二种定义方法

3.2成员变量命名的建议

上面的函数,形参和实参的命名完全一致,完全分不清,事实证明编译器分不清

所以,我们在对成员变量命名时,最好与形参分开。一般可以在成员名前加一个_,或者后面加_,或者是m(member成员的含义)+成员名

class Date
{
public://成员函数void Init(int year, int month, int day){_year = year;_month = month;_day = day;}void Print(){cout << _year << "-" << _month << "-" << _day << endl;}
private://成员变量int _year;//year_  mYearint _month;//month_ mMonthint _day;//day_  mDay
};
int main()
{Date d;d.Init(2024, 4, 4);d.Print();return 0;
}

四:类的访问限定符及封装

4.1类的访问限定符

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

一般情况下,将成员函数设为public,将成员变量设为private

访问限定符的说明:

1.public修饰的成员可以在类外直接被访问

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

3.访问权限作用域从该访问限定符出现的位置开始直到下一访问限定符出现时为止

4.如果后面没有访问限定符,作用域到 } 即类结束

5.class的默认访问权限是private,struct的默认访问权限是public(struct要兼容C)

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

问题: C++ struct class 的区别是什么?
解答: C++ 需要兼容 C 语言,所以 C++ struct 可以当成结构体使用。另外 C++ struct 还可以用来
定义类。和 class 定义类是一样的,区别是 struct 定义的类默认访问权限是 public class 定义的类
默认访问权限是 private 。注意:在继承和模板参数列表位置, struct class 也有区别,后序给大
家介绍。

4.2封装

面向对象的三大特性: 封装、继承、多态
(所有面向对象的语言都有这三个特点;这三大特性只是常用来说的,面向对象的特性不知三个)
在类和对象阶段,主要是研究类的封装特性,那什么是封装呢?
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来
和对象进行交互。
封装本质上是一种管理,让用户更方便使用类 。比如:对于电脑这样一个复杂的设备,提供给用
户的就只有开关机键、通过键盘输入,显示器, USB 插孔等,让用户和计算机进行交互,完成日
常事务。但实际上电脑真正工作的却是 CPU 、显卡、内存等一些硬件元件。
对于计算机使用者而言,不用关心内部核心部件,比如主板上线路是如何布局的, CPU 内部是如
何设计的等,用户只需要知道,怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。因此
算机厂商在出厂时,在外部套上壳子,将内部实现细节隐藏起来,仅仅对外提供开关机、鼠标以
及键盘插孔等,让用户可以与计算机进行交互即可
C++ 语言中实现封装,可以 通过类将数据以及操作数据的方法进行有机结合,通过访问权限来
隐藏对象内部实现细节,控制哪些方法可以在类外部直接被使用

 

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

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

相关文章

C#项目引用解决方案中其他项目dll时,出现黄色感叹号的解决方案

问题引入 今天拿着老师傅的老项目&#xff0c;需要做通讯调试&#xff0c;说测试一下&#xff0c;便添加了一个项目A来编写结构体&#xff0c;然后在窗体程序项目B中引用A&#xff0c;发现B一引用A&#xff0c;在B项目的引用下面A就多了个黄色感叹号&#xff0c;一编译B项目&am…

基于k8s的高性能综合web服务器搭建

目录 基于k8s的高性能综合web服务器搭建 项目描述&#xff1a; 项目规划图&#xff1a; 项目环境&#xff1a; k8s&#xff0c; docker centos7.9 nginx prometheus grafana flask ansible Jenkins等 1.规划设计整个集群的架构&#xff0c;k8s单master的集群环境&…

PyTorch深度学习——张量及其运算

深度学习框架的张量 张量的运算是深度学习的核心&#xff0c;如一张图片可以看作是四维的张量&#xff0c;一个迷你批次的文本可以看作是二维张量&#xff0c;基本上所有的深度学习模型都可以表示为张量的操作&#xff0c;梯度、反向传播算法也可以表示为张量和张量的运算 张…

scoped原理及使用

一、什么是scoped&#xff0c;为什么要用 在vue文件中的style标签上&#xff0c;有一个特殊的属性&#xff1a;scoped。 当一个style标签拥有scoped属性时&#xff0c;它的CSS样式就只能作用于当前的组件&#xff0c;通过该属性&#xff0c;可以使得组件之间的样式不互相污染。…

LLM大模型可视化-以nano-gpt为例

内容整理自&#xff1a;LLM 可视化 --- LLM Visualization (bbycroft.net)https://bbycroft.net/llm Introduction 介绍 Welcome to the walkthrough of the GPT large language model! Here well explore the model nano-gpt, with a mere 85,000 parameters. 欢迎来到 GPT 大…

深入浅出 -- 系统架构之分布式CAP理论和BASE理论

科技进步离不开理论支撑&#xff0c;而当下大行其道的分布式架构&#xff0c;透过繁荣昌盛表象&#xff0c;底层同样离不开诸多分布式理论撑持。当然&#xff0c;相信诸位在学习分布式相关技术时&#xff0c;必然学到过两个分布式领域中的基础理论&#xff0c;即&#xff1a;CA…

9.set容器的使用

文章目录 set容器1.构造和赋值代码工程运行结果 2.大小和交换代码工程运行结果 4.插入和删除代码工程运行结果 5.查找和统计工程代码运行结果 6.multset代码工程运行结果 7.指定排序规则代码工程运行结果 8.自定义数据类型排序代码工程运行结果 set容器 所有元素都会在插入时&a…

理解Three.js的相机

大家都知道我们生活中的相机&#xff0c;可以留下美好瞬间。那Three.js的相机是什么呢&#xff1f;Three.js创建的场景是三维的&#xff0c;而我们使用的显示器显然是二维的&#xff0c;相机就是抽象的定义了三维空间到二维显示器的投影方式。Three.js常见的相机有两类&#xf…

Stable diffusion 加载扩展列表报错解决方法

项目场景&#xff1a; 在使用Stable diffusion webui时&#xff0c;使用扩展列表出现错误 问题描述 点击loadfrom后&#xff0c;出现加载扩展列表报错 原因分析&#xff1a; 下载的扩展的时候&#xff0c;都是github 的url&#xff0c;需要科学上网&#xff0c;如果不能科学…

C语言动态内存空间分配

1. 前言 在讲内存分配前&#xff0c;咱来聊一下为什么会有内存分配这个概念呢&#xff0c;大家都知道C语言当中是有着许多的数据类型&#xff0c;使用这些数据类型就会在内存上开辟其相对应的空间&#xff0c;那既然会开辟相应的空间&#xff0c;为什么还会有内存分配呢&#x…

如何利用FLUENT计算流体力学方法解决大气与环境领域流动问题

ANSYS FLUENT是目前全球领先的商用CFD 软件&#xff0c;市场占有率达70%左右&#xff0c;是工程师和研究者不可多得的有力工具。由于采用了多种求解方法和多重网格加速收敛技术&#xff0c;因而FLUENT能达到最佳的收敛速度和求解精度。灵活的非结构化网格和基于解的自适应网格技…

Pycharm安装request的时候出现警告“由于目标计算机积极拒绝,无法连接”,然后出现报错无法安装

Pycharm安装request的时候出现警告“由于目标计算机积极拒绝&#xff0c;无法连接”&#xff0c;然后出现报错无法安装 一、报错二、解决办法 一、报错 二、解决办法 1、点击WinR 2、输入 regedit、进入注册表 3、在搜索框处输入&#xff1a;HKEY_CURRENT_USER\Software\Mic…

HTML基础知识详解(上)(如何想知道html的全部基础知识点,那么只看这一篇就足够了!)

前言&#xff1a;在学习前端基础时&#xff0c;必不可少的就是三大件&#xff08;html、css、javascript &#xff09;&#xff0c;而HTML&#xff08;超文本标记语言——HyperText Markup Language&#xff09;是构成 Web 世界的一砖一瓦&#xff0c;它定义了网页内容的含义和…

57 npm run build 和 npm run serve 的差异

前言 npm run serve 和 npm run build 的差异 这里主要是从 vue-cli 的流程 来看一下 我们经常用到的这两个命令, 他到传递给 webpack 打包的时候, 的一个具体的差异, 大致是配置了那些东西? 经过了那些流程 ? vue-cli 的 vue-plugin 的加载 内置的 plugin 列表如下, 依次…

Python云计算技术库之libcloud使用详解

概要 随着云计算技术的发展,越来越多的应用和服务迁移到了云端。然而,不同云服务商的API和接口千差万别,给开发者带来了不小的挑战。Python的libcloud库应运而生,它提供了一个统一的接口,让开发者可以轻松地管理不同云服务商的资源。本文将深入探讨libcloud库的特性、安装…

keycloak - 鉴权VUE

目录 一、前言 1、背景 2、实验版本 二、开始干活 1、keycloak配置 a、创建领域(realms) b、创建客户端 c、创建用户、角色 2、vue代码 a、依赖 b、main.js 三、未解决的问题 目录 一、前言 1、背景 2、实验版本 二、开始干活 1、keycloak配置 a、创建领域(r…

51单片机入门:认识开发板

认识开发板 板载资源&#xff1a; 数码管模块 说明&#xff1a; 2个四位一体共阴数码管 详细&#xff1a; 2个四位一体&#xff1a;两个独立的四位数码管&#xff0c;每个四位数码管都是“一体”的设计&#xff0c;也就是说&#xff0c;每个数码管内部集成了四个独立的七段LE…

【学习】成为优秀的软件测试工程师需要学哪些知识

成为软件测试工程师&#xff0c;需要学习的内容非常的多&#xff0c;但是无非是这几大类&#xff0c;今天就和小编一起来看看这些知识&#xff0c;你是否都已经掌握。 01、测试环境的搭建 本部分主要是学习从操作系统开始&#xff0c;有关的计算机基础知识、软件和硬件知识、…

golang设计模式图解——模板方法模式

设计模式 GoF提出的设计模式有23个&#xff0c;包括&#xff1a; &#xff08;1&#xff09;创建型(Creational)模式&#xff1a;如何创建对象&#xff1b; &#xff08;2&#xff09;结构型(Structural )模式&#xff1a;如何实现类或对象的组合&#xff1b; &#xff08;3&a…

LeNet卷积神经网络

文章目录 简介conv2d网络层的结构 简介 它是最早发布的卷积神经网络之一 conv2d 这个卷积成的参数先进行介绍一下&#xff1a; self.conv1 nn.Conv2d(in_channels3, out_channels10, kernel_size3, stride1, padding1)先看一下in_channels 输入的通道数&#xff0c;out_cha…