C++ primer 复习 第二章 变量和基本类型 2.2 — 2.6(2)

简介: C++ primer 复习 第二章 变量和基本类型 2.2 — 2.6

2.5 处理类型

类型别名:提高代码可读性


解决程序复杂,变量复杂,拼写困难问题


typedef double wages;
//注意这里并不是声明变量, typedef 声明别名
typedef wages base, *p;//base是double的同义词,p是double*的同义词
using p = double*; //C++11,声明别名
wages hourly, weekly;
p p1;//等价于double* p1

指针(复合类型)使用类型别名


typedef char* pstring;
const pstring p1 =0; //const 和 pstring都是用来修饰 p1的
//指向char*的 指针常量
const pstring *ps; //const是修饰pstring的,修饰符的匹配原则,从右往左
//ps是指针变量,它的对象是指向char的指针常量

auto 类型说明符:C++11让编译器通过初始值推断变量类型


auto i =0,*p = &i; //正确
auto a =0, b =3.14;//错误,auto已经被推断为int型
int i =0, &r = i;
auto a = r; //a是int型
const int c1 = i, &r1 = c1;
//auto在推断类型时,顶层const会忽略(对于等号左边而言)
auto b = c1; //b是int型,c1的顶层const被忽略
auto c = r1; //c是int型,c1顶层const被忽略
auto d = &i; //d是int*,整型的地址就是指向整型的指针
auto e = &c1;//e是const int* 常量指针,底层const没被忽略
const auto f = c1;//auto推演类型为int,f类型为const int
auto &g = c1; // const int 整型常量引用,即引用的对象是一个常量
auto &h =42; //错误,规定:不能对非常量引用绑定字面值
const auto &h =42;//正确,可以为常量引用绑定字面值

decltype类型说明符: 选择并返回操作数的数据类型


引用都是其对象的同义词,但decltype是一个例外


const int c1 =0,&c2 = c1;
decltype(c1) x =0; //const int 
decltype(c2) y =0; //const int&
decltype(c2) z;//错误,必须初始化

如果表达式内容是解引用操作,则decltype会得到引用类型


decltype(val)的结果永远为引用,val本身也可以是引用

int i =42, *p = &i, &r = i;
decltype(r +0) b; //正确,int
//注意,*不是出现在声明中,而是在表达式中的解引用符
decltype(*p) c;//错误,解引用表达式,c的类型为引用必须初始化
//变量如果是加上括号,decltype的结果为引用
decltype((i)) d;//错误,int&类型必须初始化
decltype(((i))) d1 = i; //正确
decltype(i) e;//正确,e是一个未初始化的int

解引用操作符 :*,得到指针所指对象的引用


int ival;
int *ip = &ival;
int &iref = *ip; //*ip就是ival的引用,等价于 int &iref = ival

2.6 自定义数据结构,类和文件

自定义数据结构 :一组数据以及相关操作的集合


类定义:类定义可以是关键字 class 或 struct


默认继承访问权限不同,struct 是 public ,class 是 private


//数据成员定义了类对象的具体内容,每个对象有自己的一份拷贝
struct Sales_data{
  std::string bookNo;
  unsigned units_sold =0;
  double pi =3.14;
}; //类定义的最后需要加上分号

类使用


类通常定义在头文件中


#ifndef SALES_DATA_H#ifndef SALES_DATA_H#include<string>struct Sales_data{
  std::string bookNo;
  unsigned units_sold =0;
  double pi =3.14;
};
#endif

//*ip就是ival的引用,等价于 int &iref = ival


## 2.6 自定义数据结构,类和文件**自定义数据结构** :一组数据以及相关操作的集合
**类定义**:类定义可以是关键字 class 或 struct
默认继承访问权限不同,struct 是 public ,class 是 private
```c++//数据成员定义了类对象的具体内容,每个对象有自己的一份拷贝struct Sales_data{  std::string bookNo;  unsigned units_sold = 0;  double pi = 3.14;}; //类定义的最后需要加上分号

类使用


类通常定义在头文件中


#ifndef SALES_DATA_H#ifndef SALES_DATA_H#include<string>struct Sales_data{
  std::string bookNo;
  unsigned units_sold =0;
  double pi =3.14;
};
#endif

附 思维导图

第二章完整思维导图,便于记忆




相关文章
|
4天前
|
存储 IDE 编译器
深入探索C++中的变量世界:理论与实践
【4月更文挑战第5天】本文介绍了C++变量的基础知识,包括声明、数据类型、const和volatile限定符。通过示例展示了变量在用户输入、计算、控制流程和函数参数中的应用,并列举了常见错误及避免方法,如未声明、作用域混淆、类型不匹配、未初始化和拼写错误。最后提出了变量命名、避免冗余、适时复用、注释说明和利用现代C++特性的最佳实践。
29 0
|
4天前
|
存储 安全 C++
C++ 用户输入与数据类型详解:建立基本计算器及变量类型
了解C++的用户输入和数据类型。使用`cin`从键盘读取数据,如在简单计算器示例中获取两个数字并求和。C++的数据类型包括:`int`(整数)、`float`(浮点数,约6-7位小数)、`double`(更精确的浮点数,约15位小数)、`bool`(布尔值,true或false)、`char`(单个字符)和`string`(文本字符串)。每种类型都有特定的存储大小和用途。在处理浮点数时,`double`通常更安全。字符串需要包含`&lt;string&gt;`库。更多内容可关注微信公众号`Let us Coding`获取。
42 0
|
4天前
|
存储 C++ 容器
学会在 C++ 中使用变量:从定义到实践
C++中的变量是数据容器,包括`int`、`double`、`char`、`string`和`bool`等类型。声明变量时指定类型和名称,如`int myNum = 15;`。`cout`与`&lt;&lt;`用于显示变量值。常量用`const`声明,值不可变。变量名应唯一,遵循特定命名规则,常量声明时需立即赋值。
119 1
|
4天前
|
算法 C++
【C++入门到精通】condition_variable(条件变量)C++11 [ C++入门 ]
【C++入门到精通】condition_variable(条件变量)C++11 [ C++入门 ]
12 0
|
4天前
|
编译器 C++
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
【C++】【C++的常变量取地址问题(对比C的不同)】const修饰的常变量&volatile修饰用法详解(代码演示)
|
4天前
|
存储 程序员 编译器
C++从入门到精通:1.1.1基础语法之变量
C++从入门到精通:1.1.1基础语法之变量
|
4天前
|
存储 程序员 编译器
C++注释、变量、常量、关键字、标识符、输入输出
C++注释、变量、常量、关键字、标识符、输入输出
|
4天前
|
存储 监控 编译器
【C++】static关键字及其修饰的静态成员变量/函数详解
【C++】static关键字及其修饰的静态成员变量/函数详解
45 3
|
4天前
|
编译器 C++
C++:编译器对被const修饰变量的处理行为(替换)
C++:编译器对被const修饰变量的处理行为(替换)
14 0
|
4天前
|
算法 测试技术 编译器
【C++ 基本类型 bool 】深入探索C++中的布尔类型Boolean(二 )
【C++ 基本类型 bool 】深入探索C++中的布尔类型Boolean
29 0