cppandc
bigfly Lv4

c++ primer plus

引言

OPP面向对象的编程

汇编语言可移植性差,不能跨平台

数据和算法的区别:数据是程序使用和处理的信息,算法是程序使用的方法。

C语言强调的是算法,C++强调的是数据,也就是通过类来对数据进行相应的操作。
这也就决定了C只擅长做底层硬件的访问,而C++由于其更高级的抽象,且因C++是C的超集(所有的C程序都能在C++环境下运行),故C++可以对底层硬件进行访问,又能对上层各种数据操作的抽象类进行操作。

类:把所有的数据、操作(方法)抽象的封装在一块。

对类进行实例化 ,可以创建一个或多个对象。

c++的方便之处是可以调用大厂、或者开源的公开包,里面实现了各种各样的操作。
泛型编程: 泛型编程强调的是独立于特定数据类型。例如想要实现一个数据类型转换的函数,只需要写一个就行了,这样有泛型编程的思想就可以实现所有不同数据类型之间的转换。

对象和类

类实际上和结构体是比较像的,传统的结构体中是各种数据类型
类是既有数据又有函数(数据操作的方法)的。 类是一种将抽象转换为用户定义类型的C++工具,它将数据表示和操纵数据的方法组合称一个整洁的包。

c++ primers

第一章

初始输入输出:c++语言并未定义任何输入输出语句,取而代之,包含了一个全面的标准库(standard library)来提供IO机制(以及很多其他设备)。书中很多例子用iostream库,术语“流”想要表达的是,随着时间的推移,字符是顺序生成或消耗的。
标准输入输出对象:标准库定义了四个IO对象,分别是 cin(发音see-in) 、cout、cerr、clog
for循环和while 循环(迭代)的优缺点: 一般确定循环次数的情况下,倾向于用for循环;当不确定循环次数,但知道循环条件时,倾向于用while循环。
类 : int a,其中int 相当于 类,a相当于对象

第二章

cpu擅长逻辑运算而不擅长逻辑运算
float 和double都是浮点类型且二者 占用的资源是差不多的一般情况下,更推荐用double
数值在计算机中存储都是以补码的形式。
源码:最高位表示符号位:1表示负数,0表示正数。反码:除了符号位,其余位全部取反。补码:为反码加一
有符号类型和无符号类型运算时会将有符号的转换为无符号类型。
指针本身是一个对象,它又可以指向另外一个对象。因此,指针本身是不是常量以及指针所指的对象是不是常量就是两个相互独立的问题。用 顶层const 表示指针本身是个常量, 用底层const表示指针所指的对象是一个常量。
常量指针p1 ,指针常量 p2

int i = 0;
int *const p1 = &i; //这里p1是一个顶层const ,不能改变p1的值
const int c1 =42;
const int *p2 = &c1;// p2是一个底层const, 允许改变p2的值。

字面值常量 :
每个字面值常量都对应一种数据类型,字面值常量的形式和值决定了它的数据类型。

指定字面值的类型

字符和字符串字面值:

前缀 含义 类型
u Unicode 16 字符 char16_t
U Unicode 32 字符 char32_t
L 宽字符 wchar_t
u8 UTF-8(仅用于字符串字面常量) char

整形字面值:

后缀 最小匹配类型
u or U unsigned
l or L long
ll or LL long long

浮点型字面值:

后缀 类型
f or F float
l or L long float

** 变量**
变量提供一个具名的、可供程序员操作的存储空间。对C++程序员来说变量和对象一般可以互换使用。
通常情况下对象指的是一块能存储数据并具有某种数据类型的内存空间。
初始化并不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。
@@@@建议初始化每一个内置类型的变量。
C++是一种静态类型语言,其含义是在编译阶段检查类型。
对象的类型决定对象所能参与的计算过程。
引用必须初始化。引用和const一样在定义的时候就要初始化,且不支持二次修改。
引用的初始值必须是一个对象,而不能是一个数字或者字符。
指针实现了对其它对象的间接访问。
指针与引用的不同:1、指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内它可以先后指向几个不同的对象。2、指针无须在定义时赋初值。和其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。
p赋值实际上是为p所指的对象赋值。 若指针p指向一个对象,则允许使用解引用符()来访问该对象,p存放的是对象地址,*p存放的是对象。
引用本身并非一个对象。一旦定义了引用,就无法令其绑定到另一个对象。

顶层const和底层const :顶层const 表示指针本身是一个常量,而底层const表示指针所指的对象是一个常量。
常量表达式:指不会改变并且在编译过程就能得到计算结果的表达式。
constexper变量 :在一个复杂系统中,很难分辨一个初始值到底是不是常量表达式,constexper 变量可以认为设定初始值是常量表达式,当编译时发现其不是常量表达式会报错。若用const 则不会报错。
auto 和 decltype类型指示符的区别:decltype可以从表达式的类型推断出要定义的类型,但是不用表达式的值初始化变量。编译器分析表达式的类型,却不实际计算表达式的值。
decltype(*p) c; c的类型是引用。若想定义一个指针用 decltype(p) c;
如果给变量加上一层或多层括号,编译器就会把他当成表达式。