本文主要关于数据类型。面向对象编程的本质就是设计并扩展自己的的数据类型。
首先了解c++的内置数据类型 :基本类型和复合类型
基本类型:整形和浮点型 复合类型:数组、指针、字符串、结构 存储数据的方法:变量
- 简单变量
变量命名规则:
如果想用多个单词组成一个名称,通常使用下划线字符将单词分开,如 my_onions,或者 从第二个单词开始将每个单词的第一个字母大写:myEyeTooth
- 整型
不含小数的数字 0,-3 ,100。不同的整型使用不同的内存来存储整数。有符号和无符号类型分别表示正负数和正数
short int long longlong 通过不同数目的位存储值:(都是有符号数)
short 至少16位 :short x (short== short int)
int 至少与short一样长
long 至少32位,且至少与int一样长 (long == long int)
lonng long 之少64位,且至少与long一样长
sizeof 运算符,获得变量的所占字节,对于类型名 int等使用时,需要加括号: sizeof (int),如果是对于变量,可加可不加。
#include<iostream>
using namespace std;
int main(){
int x_collec =2;
cout<<"x_collec is"<<sizeof(x_collec)<< endl;
}
初始化:
int year =2022 //如果知道变量初始值,建议定义时候赋初值。
c++11 初始化方法:将大括号用于单值变量,采用这种方法时候,=可以去掉
int x={3} or int x{3}
大括号中不含值默认为0 int z{}
头文件climits
climits定义了符号常量来并表示类型的限制: int n =INT_MAX;
- 无符号类型
要创建无符号类型,只需要使用unsigned 来修改变量声明。
unsigned short x
unsigned int x
unsigned long x
- char 类型 (也是整型)
char用于存储字符(字母和数字) char x =”M” ,实际上,计算机中存储的是对应的字符编码77,可以将x =x+1,char值位78,对应N,可以通过 (int)x强制转换为78
有些字符不能通过键盘直接输入,比如换行符不能用回车,因此,有了下面的转义字符:
char 占8bit,unsigned char 表示范围0-255, signed char 表示范围-128~127
c++11新增 char16_t char32_t, char16_t 无符号16位, char32_t 32位有符号数,使用前缀u表示 char16_t 类型的字符常量和字符串常量, 使用前缀U表示 char32_t 类型的字符常量和字符串常量 : char16_t ch=u’q’;
- bool类型
布尔值 true or false,将非 0值解释为true,将0解释为false。字面值true和false都可以通过提升转换(不用显式强制转换)为 int类型,true转换为1,false转换为0。
- const限定符
常量被初始化后就不能修改了 const int year =2022
const type name =value
浮点数
能够表示 带小数部分的数字
书写浮点数:
1、标准写法 12.34 22.3 0.12 8.0
2、E表示法 3.45E6 指的是3.45与1000000相乘结果,E6指的是10的6次方,6是指数,指数可以是正数也可以是负数。E可以写成e。
- 浮点类型
三种:float 32位 double 64位 long double 128位,浮点数有精度限制。
float 只能保证6位精确位,double保证13位精确度。
cout所属的ostream类有一个类成员函数,能够精确的控制输出格式-字段宽度、小数位数、采用小数格式还是E格式等。后面会给出实现。
在程序中使用 浮点常量时候,默认会认为是double型,如果要指定类型,在常量后加后缀:
1.23f —-float型
1.23L —–long double
1.23 —-默认double 类型
c++ 算数运算符
加、减、乘、除、求模
除法:如果两个整数相除,结果会是一个整数(小数部分直接舍去),如果两个数中 有一个或两个是浮点数,则小数部分会被保留。(因为系统会将不同操作数进行自动准换成相同的类型)。
类型转换
1、初始化和赋值进行的转换
比如赋值时 double x = 3.14f 将一个float型付给double ,如果将double付给float变量,可能会导致降低精度。int x =3.14f 最终x=3(直接丢弃小数部分)
0赋值给bool,会转换为false,非0值会变为true
2、算数运算时
变量提升:在计算表达式时c++将 bool、char、unsigned char 、signed char 和short 转换为int。
3、传递参数时转换
4、强制类型转换
首先要明确一点强制转换不会修改变量本身 ,而是创建一个新的、指定类型的值。
以下两种方法都可以:
(long) x 或者 long (x)
(typename) value type (value)
c++还引入了强制类型转换运算符: static _cast<typename> (value)
C++中的auto声明
c++11新增了auto,让编译器能够根据初始值类型推断变量类型。
typedef
C 语言提供了 typedef 关键字,您可以使用它来为类型取一个新的名字。
typedef unsigned char BYTE; 在这个类型定义之后,标识符 BYTE 可作为类型 unsigned char 的缩写