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

附 思维导图

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




相关文章
|
1月前
|
C语言 C++
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
16 0
|
3月前
|
存储 安全 C++
C++:指针引用普通变量适用场景
指针和引用都是C++提供的强大工具,它们在不同的场景下发挥着不可或缺的作用。了解两者的特点及适用场景,可以帮助开发者编写出更加高效、可读性更强的代码。在实际开发中,合理选择使用指针或引用是提高编程技巧的关键。
32 1
|
2月前
|
JavaScript 前端开发 Java
通过Gtest访问C++静态、私有、保护变量和方法
通过Gtest访问C++静态、私有、保护变量和方法
62 0
|
5月前
|
安全 C++
C++一分钟之-互斥锁与条件变量
【6月更文挑战第26天】在C++并发编程中,`std::mutex`提供互斥访问,防止数据竞争,而`std::condition_variable`用于线程间的同步协调。通过`lock_guard`和`unique_lock`防止忘记解锁,避免死锁。条件变量需配合锁使用,确保在正确条件下唤醒线程,注意虚假唤醒和无条件通知。生产者-消费者模型展示了它们的应用。正确使用这些工具能解决同步问题,提升并发性能和可靠性。
59 4
|
5月前
|
存储 C++ 容器
C++一分钟之-变量与数据类型入门
【6月更文挑战第18天】**C++编程基础:变量与数据类型概览** 了解变量(存储数据的容器)和数据类型是编程入门的关键。声明变量如`int age = 25;`,注意初始化和类型匹配。基本数据类型包括整型(int等)、浮点型(float、double)、字符型(char)和布尔型(bool)。理解类型范围和精度,使用字面量后缀增强可读性。深入学习数组、指针、结构体和类,以及动态内存管理,避免数组越界和内存泄漏。不断实践以巩固理论知识。
43 1
|
5月前
|
C++
c++primer plus 6 读书笔记 第十四章 C++中的代码重用
c++primer plus 6 读书笔记 第十四章 C++中的代码重用
|
5月前
|
程序员 编译器 C++
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
46 0
|
5月前
|
SQL 人工智能 算法
技术心得记录:模板函数函数模板FunctionTemplate(C++Primer
技术心得记录:模板函数函数模板FunctionTemplate(C++Primer
|
5月前
|
C++
C++之变量与常量
C++之变量与常量
|
21天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
21 4