嵌入式学习——4——c++ 结构体+类

1、数据类型

基本数据类型:char、int 、float、 double、string、bool

构造数据类型:数组、指针、结构体、共用体、枚举、类

2、引用

引用就是 别名

数据类型 &引用名 = 同类型的变量名 (&引用符号)

 int a = 10;int &b = a;  // b引用a.  或者给a取个别名叫b

引用的目标一旦指定,就不可以改变

数组引用

 //定义一个数组int a[5] = {10,20,30,40,50};//数组指针int (*p)[5] = &a;//数组引用int (&b)[5] = a;b[2] = 900; //==   a[2] = 900

函数引用

int max(int x, int y)
{return  x>y ? x:y;
}//函数指针int (*p)(int, int) = max;cout << p(23, 78) << endl;//函数引用int (&fun)(int, int) = max;cout << fun(66, 99) << endl; // ==   max(66, 99)

当结构体中有引用成员时,如果用该结构体类型定义变量,就必须定义的同时初始化,否则报错

当函数返回一个引用变量时

1> 该变量的生命周期要长

2> 静态变量、 在堆区申请的变量

int &fun()  // int &num = num;
{static int num = 100; //要求返回的变量生命周期要长return num;
}int main()
{int a = fun();  return 0;
}

总结: 指针与引用的区别

指针:存储地址的变量

引用:就是一个别名

1、初始化有区别,别名必须带值初始化,指针不一定

2、定义指针需要申请空间,引用不需要申请空间

3、指针指向可以改变,引用不可以改变

4、引用不是数据类型,没有引用数组以及二级引用,但是有指针数组和二级指针

3、const

const 修饰变量时,该变量不可以改变, 只读变量

const int *p; //指针指向里的值不可变,指向可变
int * const p; //指针指向里的值可变,指向不可变
int const * const p;//都不变int a = 10;
const int b = 20;
int *pa = &a; //合法
//int *pb = &b; // 不合法
//*pb = 30;
//保存常变量地址  需要对指针加以限制
const int *pb = &b;int a = 10;
const int b = 20;
int &ppa = a; //合法
//int &ppb = b; // 不合法
//ppb = 30;
//如果想给常变量取个别名, 需要对别名(引用)加以限制
const int &ppb = b;// (ppb  常引用)

4、函数重载

4.1 概念

在同一个作用域下,两个以上的函数,取相同的函数名,其参数的个数或者参数的类型不同,编译器会根据实参的参数个数或类型,自动调用匹配的函数,这就是函数重载。

注意:不以返回值作为标准

int add(int x, int y)
{return x+y;
}int add(char x, char y)
{return x+y;
}string add(string x, string y)
{return x+y;
}double add(double x, double y)
{return x+y;
}

4.2 默认参数

具体的使用:如果函数调用没有给实参,那么就使用形参的默认值。如果函数调用给了具体实参,那么就使用所传递的实参。

4.3 内联函数

概念: 就是在函数前加个关键字 inline ---->该函数就是内联函数。

内联函数的要求:

1> 要求代码量比较小,程序代码一般不超过5行

2> 不能有复杂的语句,比如循环,分支

3> 递归函数不能作内联

作用:提高代码的运行效率 (原因:内联函数是在编译时展开)

内联函数带参宏替换的区别:

1> 内联函数是函数调用,带参宏是替换。

2> 内联函数是在编译时展开,而宏替换是在预处理时展开

4.4  哑元

用于代码的升级优化。

在定义函数的形参时,只定义类型,不定义形参名,在函数体中也不使用。

作用:没有作用,占位

5、c++中的结构体

C++中的结构体和C语言中的结构体的区别:

1>C语言中的结构体在C++中依然使用

2> C++中的结构体可以有函数,而C语言中的结构体不可以。

3> C++定义结构体类型时,可以给变量赋初始值,而C语言中的结构体不可以。

4> C++中结构体,使用结构体类型定义变量时,可以省略关键字struct不写。而C语言中的结构体不可以。

5> C++中的结构体中有访问权限,而C语言中的结构体没有访问权限。

6> C++中的结构体有继承,而C语言中的结构体没有继承。

7> C++中的结构体有特殊的成员函数,而C语言中的结构体没有。

注意:在C++中定义结构体的结构名时,首字母大写。

C++的结构体访问权限:默认是public 共有权限

访问权限:public公有 、protected受保护、private私有

6、类

6.1 概念

C++中的类是由C++中的结构体演变而来,一般有变量又有函数的构造类型,用类来完成。

只是默认访问权限默认继承方式以及关键字不同。(C++中的类和C++中的结构体区别)

结构体的关键字:struct

结构体的默认访问权限:public(共有的)

结构体的默认继承方式:public(共有的)

类的关键字:class

类的默认访问权限:private(私有的)

类的默认继承方式:private(私有的)

6.2 格式

class 类名
{public:公共的数据成员、成员函数protected:受保护的数据成员、成员函数private:私有的数据成员、成员函数
};

6.3 访问权限的介绍

1> public: 该权限是公共的, 表示该权限下的属性(变量)、方法(函数),可以在类内、子类、类外被访问。

2> protected:该权限是受保护的, 表示该权限下的属性(变量)、方法(函数), 可以在类内、子类被访问,类外不可以被访问。

3> private:该权限是私有的, 表示该权限下的属性(变量)、方法(函数),只能在类内被访问,子类、类外不可以被访问。

6.4 封装

面向对象:封装、继承、多态

类的三大属性:封装、继承、多态

封装:对数据和对数据的处理捆绑在一起的过程。

                属性   +   方法   =   封装

             (变量)(函数)

类中的内容,都可以称为成员,成员又可以分为:数据成员、成员函数

一般类中的数据成员封装成private权限,成员函数封装成public权限。

练习

/*
自己封装一个矩形类(Rect),拥有私有属性:宽度(width)、高度(height),
定义公有成员函数:
初始化函数:void init(int w, int h)
更改宽度的函数:set_w(int w)
更改高度的函数:set_h(int h)
输出该矩形的周长和面积函数:void show()
*/#include <iostream>using namespace std;class Rect {
private:int _width;int _height;
public:void init(int width = 1, int height = 1) {_width = width;_width = height;}void set_w(int width){_width = width;}void set_h(int height) {_height = height;}void show(){cout << "周长:" << 2*(_width+_height) << ",面积:" << _width * _height << endl;}
};int main()
{Rect rect;rect.init(10,30);rect.show();return 0;
}

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

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

相关文章

标准发布 | 反渗透和纳滤水处理膜修复再利用技术要求

本文件由浙江大学、中华环保联合会水环境治理专业委员会提出。 本文件由中华环保联合会归口。 本文件主编单位&#xff1a;浙江大学、河南一膜环保技术有限公司、安徽精高水处理有限公司、国能龙源环保有限公司、湖南沁森高科新材料有限公司。 本文件参编单位&#xff1a;深…

rtl8723DU移植 android4.4 4418

一、 linux 的移植。 首先编译一遍确保没有问题。 将驱动拷贝到 driver/net/wireless 目录下。 使用的是&#xff1a; 改写 makefile Kconfig 去改写 8723 的makefile 设置menuconfig 使能固有的 库。 使能USB部分 ieee 部分 编译一遍 有报错。 解决&#xff1a; …

MATLAB R2024a下载安装

目录 前言 下载安装教程 资源 前言 一个很好的资源&#xff0c;我自己是一遍过了&#xff0c;非常顺利&#xff0c;不说废话&#xff0c;直接上菜。 下载安装教程 MATLAB R2024a下载及安装演示_哔哩哔哩_bilibili 资源 MATLAB R2024a网盘资源

Java对sqlserver表的image字段图片读取和输出本地

Java代码实现对sqlserver数据库表的image字段图片的读取&#xff0c;和输出存储到本地 由于表image字段图片存的内容是二进制值&#xff0c;如何输出保存到本地&#xff1a; 代码示例&#xff1a;&#xff08;注&#xff1a;连接sqlserver数据库需配置其驱动文件&#xff09; …

Linux【工具 03】Telnet服务安装使用(安全性较差 非特殊情况尽量不要使用)

Telnet服务安装使用 1.说明2.安装 1.说明 现在大多数服务器的远程连接基本都是走的SSH协议&#xff0c;也就是常用的22端口【默认端口可以自行调整】。在升级OpenSSH的过程中要卸载老版本&#xff0c;安装新版本&#xff0c;也就意味着升级过程中如果出现了问题&#xff0c;且…

Spring MVC 应⽤分层

什么是应用分层 引用分层是一种软件开发思想 将应用程序分为N个层次每个层次负责各个职责 其中MVC是常见的设计模式这就是应用分层的具体体现 目前主流的开发方式是前后段分离后端开发工程师不再需要关注前端的实现,对此就需要分为表现层&#xff0c;数据层&#xff0c;业务逻…

FPGA DMA IP核使用指南

摘要 本文旨在介绍FPGA中DMA(Direct Memory Access)IP核的使用,包括其基本框架、测试代码编写以及仿真波形的分析。DMA是一种允许外围设备直接与内存进行数据交换的技术,无需CPU的介入,从而提高了数据传输的效率。 1. 引言 在现代FPGA设计中,DMA IP核因其…

Day15—图像爬虫与简单处理

图像爬虫是一种专门用于从互联网上下载图像的网络爬虫。除了文本内容,图像也是网站中的重要组成部分,它们可以用于多种目的,如图像识别、内容分析、数据备份等。 环境准备 首先,确保你的环境中已安装Python和必要的库。如果没有安装Pillow库,可以通过以下命令安装:pip in…

Leetcode刷题笔记6

34. 在排序数组中查找元素的第一个和最后一个位置 34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; 解法一&#xff1a;暴力查找 [1, 2, 3, 3, 3, 4, 5] t 3 从前往后扫描暴力查找&#xff0c;最坏情况下O(N) 优化 利用数组有序的…

【LLM多模态】综述Visual Instruction Tuning towards General-Purpose Multimodal Model

note 文章目录 note论文1. 论文试图解决什么问题2. 这是否是一个新的问题3. 这篇文章要验证一个什么科学假设4. 有哪些相关研究&#xff1f;如何归类&#xff1f;谁是这一课题在领域内值得关注的研究员&#xff1f;5. 论文中提到的解决方案之关键是什么&#xff1f;6. 论文中的…

随想录 Day45 1049. 最后一块石头的重量 II 494. 目标和 474.一和零

随想录 Day45 1049. 最后一块石头的重量 II 494. 目标和 474.一和零 1049. 最后一块石头的重量 II 题目链接 有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起…

带你学习Mybatis之Mybatis全局配置文件

Mybatis全局配置文件 <?xml version"1.0" encoding"UTF-8"?><configuration> <!-- 配置 --> <properties/> <!-- 属性 --> <settings/> <!-- 设置 --> <typeAliases/> <!-- 类型别名 -->…

车载以太网的未来:OPEN Alliance下17个技术委员会的最新进展与行业影响(下)

从上篇介绍来看&#xff0c;TC1-TC8大多数处于暂停或完成状态。而TC9-TC17在2023年都有不同程度的进展&#xff0c;让我们继续探索藏在其中的车载以太网的发展和挑战。 TC9 Automotive Ethernet Channel & Components&#xff08;in progress&#xff09; TC9的目标是为通…

[初始计算机]——计算机网络的基本概念和发展史及OSI参考模型

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;网络通信基础TCP/IP专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年5月30日11点59分 &#x1f004;️文章质量&#xff1a;96分 ​ 目录 &#x1f310;计算机网络概述 &#x1f4af;…

opencv是什么?它有什么功能和特性?它值不值得我们去学习?我们该如何去学习呢?

1.opencv是什么&#xff1f; OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉库&#xff0c;旨在提供一系列丰富的图像处理和计算机视觉算法&#xff0c;以及用于构建实时图像处理和机器视觉应用程序的开发工具。它最初由英特尔开发…

使用QT可视化操作信号与槽函数详解

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、引言 二、QT信号与槽机制概述 三、实际操作步骤 四、案例演示 五、总结 一、引言 在…

中国养生保健元宇宙-探索养生保健新领域

在全球化和科技迅速发展的今天&#xff0c;元宇宙作为一种全新的互联网应用和社会形态&#xff0c;正逐步渗透到人们生活的各个方面。特别是在养生保健领域&#xff0c;中国的元宇宙概念正在引领一场革命&#xff0c;将古老的养生智慧与现代科技完美融合&#xff0c;为人们打造…

单片机建立自己的库文件(1)

文章目录 前言一、代码模块化是什么&#xff1f;二、使用步骤1.以LCD1602作为例子2.将LCD1602 相关的代码抽取到另外一个文件中 三、调用LCD1602.h1.新建一个工程项目&#xff0c;将LCD1602.h添加到工程中2.在主函数上加入 #include <LCD1602.h> 总结 前言 提示&#xf…

进口铝合金电动隔膜泵

进口铝合金电动隔膜泵是一种高效、可靠的工业泵&#xff0c;其特点、性能与应用广泛&#xff0c;以下是对其的详细分析&#xff1a; 特点 材质与结构&#xff1a; 采用铝合金材料制造&#xff0c;具有良好的耐腐蚀性和轻量化特点。铝合金材质使得泵体结构紧凑、轻便&#xff…

svg实现一个圆形以及方形的环形进度条

1. svg实现圆形进度条 效果图&#xff1a; 1. 写个假接口&#xff1a; let res {curLegendList: [{ progress: "87", name: "进度1",color:"#00fe41" },{ progress: "66", name: "进度2" ,color:"orange"},{ p…