C++初学(3)

embedded/2024/11/12 4:13:42/

面向对象编程(OOP)的本质是设计并拓展自己的数据类型,设计自己的数据类型就是让类型与数据匹配。内置的C++类型分为两组:基本类型和复合类型。这里我们将介绍基本类型的整数和浮点数

3.1、简单变量

3.1.1、变量名

C++必须遵循几种简单的C++命名规则:

(1).在名称中只能使用字母字符、数字和下划线(_)。

(2)名称的第一个字符不能是数字。

(3)区分大小写字符。

(4)不能将C++关键字用作名称。

(5)以两个下划线大头或以下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。

(6)C++对于名称的长度没有限制,名称中所有字符都有意义,但有些平台有长度限制。

如果想用两个或多个单词组成一个名称,通常的做法是用下划线字符将单词分开,如my_yuanshi;或者第二个单词开始将每个单词的第一个字母大写,如myAccountNumber。

3.1.2、整型

整数就是没有小数部分的数字。整数有很多,目前不可能用有限的计算机内存来表示所有整数。因此语言只能表示所有整数的一个子集。而C++则提供好几种,便能根据实际要求选择最合适的整数。

不同C++整型使用不同的内存量来存储整数。使用的内存量越大,可以表示的整数值范围也越大。有的类型(符号类型)可表示正值和负值,而有的类型(无符号类型)不能表示负值。C++的基本整型分别是char、short、int、long、和long long。(按照存储整数时使用的内存量进行递增排序)。

3.1.3、整型short、int、long和long long

下面介绍一下位与字节(重要!)

计算机内存的基本单元是位(bit)。可以将bit看作电子开关,可以开,可以关。关表示值为0,开表示值为1。因为每一位都可以有两种设置,所以8位的总组合为2^8,即256。

字节(byte)通常指的是8位的内存单元,它指的是描述计算机内存量的度量单位,1KB等于1024字节,1MB等于1024KB。

C++提供了一种灵活的标准,它确保了最小长度,如下所示:

(1)short至少16位。

(2)int 至少与short一样长。

(3)long至少32位,且至少与int一样长。

(4)long long至少64位,且至少与long一样长。

这4种类型都是符号类型,负值和正值几乎相同。例如16位的int取值范围为-32768~+32767。要想知道系统中整数的最大长度,可以在程序钟使用C++工具来检查类型的长度。sizeof运算符返回类型或变量的长度,单位为字节(运算符是内置的语言元素,对一个或多个数据进行运算,并生成一个值)。

头文件climits中包含了整型限制的信息。如下代码进行演示:

#include <iostream>
#include <climits>
int main()
{using namespace std;int n_int = INT_MAX;short n_short = SHRT_MAX;long n_long = LONG_MAX;long long n_llong = LLONG_MAX;cout << "int is " << sizeof(int) <<" bytes." << endl;cout << "short is " << sizeof n_short << " bytes." << endl;cout << "long is " << sizeof n_long << " bytes." << endl;cout << "long long is " << sizeof n_llong << " bytes." << endl;cout <<  endl;cout << "Maximum values:" << endl;cout << "int:" << n_int << endl;cout << "short:" << n_short << endl;cout << "long:" << n_long<< endl;cout << "long long:" << n_llong << endl<<endl;cout << "Minimum int value =" << INT_MIN << endl;cout << "Bits per type=" << CHAR_BIT << endl;return 0;
}

3.1.3.1、运算符sizeof和头文件limits

sizeof运算符指出,int的长度为4个字节。可对类型名或变量名使用sizeof运算符。

头文件climits定义了符号常量来表示类型的限制。可以到这里看详细的定义:climts中的符号常量

climits文件中包含与下面相似的语句行:

#define INT_MAX 32767

#define和#include一样,也是一个预处理器编译指令。该编译指令告诉预处理器:在程序中寻找INT_MAX,并将所有INT_MAX都替换为32767。预处理器寻找独立的标记,并不会将单词里含有INT_MAX给替换。所以#define可以用来定义自己的符号常量。C++有一种更好的创建符号常量的方法(使用关键字const,在后面进行讨论)。

3.1.3.2、初始化

初始化将赋值与声明合并在一起。例如下面,将int的最大取值赋值给n_int。

int n_int=INT_MAX;

也可以使用字面值常量来初始化,或者用已定义过的变量来初始化,甚至可以使用表达式来初始化。

注:如果不对函数内部定义的变量进行初始化,该变量的值将是不确定的。

3.1.3.3、C++11初始化方式

用大括号初始化器用于单值变量。用这个方法可以省略等号,并且大括号内不用包含东西(默认初始化为0)。

int yuanshi={1600};
int yuanshi{7};
int mola{};

3.1.4、无符号类型

如果short表示的范围为-32768~+32767,则无符号版本的表示范围为0~65536。当且仅当数值不为负才应使用。要创建无符号版本的基本类型,只需要使用关键字unsigned来修饰声明即可。

#include <iostream>
#define ZERO 0
#include <climits>
int main()
{using namespace std;short sam = SHRT_MAX;unsigned short sue = sam;cout << "Sam has " << sam << " dollars and Sue has " << sue;cout << " dollars deposited." << endl<< "Add $1 to each account." << endl << "Now";sam += 1;sue += 1;cout << "Sam has " << sam << " dollars and Sue has " << sue;cout << " dollars deposited.\nPoor Sam!" << endl;sam = ZERO;sue = ZERO;cout << "Sam has " << sam << " doolars and Sue has " << sue;cout << " doolars deposited." << endl;cout << "Take $1 from each account." << endl << "Now ";sam += 1;sue -= 1;cout << "Sam has " << sam << " dollars and Sue has " << sue;cout << " dollars deposited." << endl << "Lucky Sue!" << endl;return 0;
}

这些整型变量的行为就像里程表。如果超越了限制,其值将为范围另一端的取值。

3.1.5、选择整型类型

(1)一般没有特殊要求选择int。

(2)如果变量的值不为负,选择unsigned。

(3)如果知道变量可能表示的整数值大于16位整数的最大可能值,则使用long;如果超过20亿,则采用long long。

(4)需要节省空间,且通常仅当有大型整型数组时用short。

3.1.6、整型字面值

整型字面值(常量)是显示地书写的常量。C++使用前一(两)位来标识数字常量的基数。

(1)第一位为1~9,则为十进制。

(2)第一位是0,且第二位1~7,则为八进制。

(3)如果前两位是0x或0X,则为十六进制。

注:默认情况下,cout以十进制格式表示整数。可以用下面代码转化cout显示方式。

cout<<dec;//十进制
cout<<hex;//十六进制
cout<<oct;//八进制

3.1.7、char类型:字符和小整数

char类型是专为存储字符而设计的。常用ASCLL码表。

#include <iostream>
int main()
{using namespace std;char ch = 'M';int i = ch;cout << "The ASCLL code for " << ch << " is " << i <<endl;cout << "Add one to the character code:" << endl;ch += 1;i = ch;cout << "The ASCLL code for " << ch << " is " << i << endl;cout << "Display char ch using cout.put(ch):";cout.put(ch);cout << endl << "Done!" << endl;return 0;
}

3.1.7.1、程序说明

ch为字符“M”,而i为“M”的ASCLL码值“77”。ch加一改变其ASCLL值,表示为“N”。

3.1.7.2、成员函数cout.put()

函数cout.put()是一个重要的C++OOP概念——成员函数——的第一个例子。成员函数归类所有,描述了操纵类的特定对象(例如这里的cout对象)来使用成员函数。必须用句点将对象名和函数名称(put())连接起来。句点称为成员运算符。它提供了另一种显示字符的方法,可以替代<<运算符。

3.1.7.3、signed char 和unsigned char

char在默认的情况下既不是没有符号,也不是有符号。是否有符号由C++决定。unsigned char类型的表示范围通常为0~255,而signed char的表示范围为-128~+127。

3.1.7.4、wchar_t

需要处理的字符集可能无法用一个8位字节表示,可以将char定义为一个16位的字节或更大的字节。iostream文件的wcin和wcout可用于处理wchar_t流。

3.1.8、bool类型

布尔变量可以是ture或false。C++将非零值解释为true,将零值解释为false。


http://www.ppmy.cn/embedded/88367.html

相关文章

前端构建系统阐述

​​​​​ 开发人员编写 JavaScript&#xff1b;浏览器运行 JavaScript。 从根本上来说&#xff0c;前端开发中不需要任何构建步骤。那么为什么我们在现代前端有一个构建步骤呢&#xff1f; 随着前端代码库变得越来越大&#xff0c;并且开发人员的人体工程学变得越来越重要&am…

7thonline第七在线出席中服协时尚科技峰会 探讨AI商品管理落地

7月25-26日&#xff0c;中国服装协会2024中国时尚科技创新峰会在杭州隆重举行&#xff0c;本次大会以“新质焕能&#xff0c;革故鼎新”为主题&#xff0c;为持续推动服装产业鼎力创新&#xff0c;以新质生产力的新特征为引领&#xff0c;布局高质量发展新赛道&#xff0c;充分…

图解RocketMQ之消费者如何进行消息重试

大家好&#xff0c;我是苍何。 在上一篇[[图解RocketMQ之生产者如何进行消息重试]]中分析了当生产者发送消息失败的时候&#xff0c;RocketMQ 是如何进行重试的。 最后留了一个问题&#xff0c;生产端的消息是重试 hold 住了&#xff0c;但如果消费者出现异常&#xff0c;消费…

基于地理面矢量的虚拟围栏

文章目录 概要大概过程C++实现头文件源码CMakeLists.txt如何使用概要 虚拟围栏(Geofencing)技术在多个领域有广泛应用,包括无人机飞行限制、车辆监控与管理、人员安全监控、儿童和宠物定位、营销与广告、智能家居与安防、自然保护区与动物监控、健康与健身应用、物流与仓储…

【QIIME2】细菌16s数据库_Greengenes

文章目录 下载Greengenes数据库在QIIME2中使用导入QIIME2中提取引用读取训练分类器测试分类器导出结果生成可视化文件 由于Bugbase功能注释时&#xff0c;输入的OTU表需经Greengenes注释&#xff08;且由于时间原因须是第一版&#xff09;&#xff0c;故尝试使用Greengenes对16…

C++自定义接口类设计器之函数解析二

关键代码 // 解析为函数 bool FunctionCreator::parse(const QString& lineFunc) {auto trimFunc lineFunc.trimmed();auto list trimFunc.split(" ");bool bHasReturn false;// 返回值和函数名解析for (const auto& key : list) {auto trimKey key.trim…

模型优化—动量梯度下降

一、mini-batch 梯度下降&#xff08;gradient descent&#xff09;&#xff1a; SGD&#xff08;stochastic GD&#xff09;随机梯度下降&#xff1a;对一个样本做梯度下降 batch梯度下降&#xff1a;使用所有样本做梯度下降&#xff08;做一次又叫epoch&#xff09; mini…

谷粒商城实战笔记-75-商品服务-API-品牌管理-品牌分类关联与级联更新

文章目录 一&#xff0c;引入Mybatis Plus分页插件二&#xff0c;品牌列表的模糊查询三&#xff0c;增加品牌测试数据四&#xff0c;开发后台品牌关联分类接口1&#xff0c;接口product/categorybrandrelation/catelog/list2&#xff0c;接口product/categorybrandrelation/sav…