C++ Prime Plus 知识点整理 - 第一、二、三章 C++基础知识

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hzt12345hf/article/details/84303400




本文假定你有基本的C语言知识,由于从第一章到底十八章的笔记已经全部写完,因此我会在整理好后直接发上来;


C++ Primer Plus 非常适合初学的人,如果已经用过C++建议可以直接去看C++ Primer这本书,而C++ Primer Plus这本书对于有经验的C++开发者可以快速翻阅,主要看自己不懂的地方,顺便做做后面的练习题;


第一章 预备知识

  • C++包括:
  1. C语言代表的过程性语言
  2. C语言基础上新增的面向对象编程
  3. C++模板支持的泛型编程
  • C面向过程 – 注重算法,采用自上向下的编程模式
    C++面向对象 – 面向数据,采用自下向上的编程模式

  • 4.3版本后的g++要使用C++11的特性应如下操作: g++ -std=c++0x main.cpp

  • 有些编译器仅当被明确指示后,才会搜索数学库,如较早的g++版本需要如下命令:g++ structfun.c -lm

  • C++文件扩展名一览:
    https://maxiang.io/client/evernote/res/https://app.yinxiang.com/shard/s66/res/eb688271-42c8-4370-a94a-70d2d2bf2d77?size=104544&format=image.png

第二章 开始学习C++

  • 命令行模式下,要让窗口一直打开的方法:
  1. 使用cin.get();直到输入任意字符
  2. 使用system("pause");直到输入任意按键
  • main()如果不定义return 0语句,则隐含包括了一个return 0;语句,其他函数除外;默认情况下,返回 0 表示程序运行成功,非零则表示存在问题;
  • 函数参数为空,C++中默认为 void 类型,而C语言则只表示对是否接受参数保持沉默;
  • C++以//...表示注释,也可用C语言的注释方式/* ... */,不过应尽量使用C++的注释方式,此方式不容易产生错误;
  • C++预处理类似于C语言,如#include <iostream>(表示用编译时用 iostream 文件内容代替此编译指令,C语言的头文件可以这样使用#include <cstdio>或者#include "stdio.h"
  • 命名空间是为了区分不同代码框架下具有相同函数名的函数;
  • iostream表示标准输入输出头文件;cincout都属于iostream的类实例,cout面向对象特性,其重载了<<运算符,因此便于输出各种不同类型的数据;endl确保程序继续运行前刷新输出,而\n则不保证这样,可能会在输入信息后显示;

cin cout其他设置

  1. cout<<hex; cout<<dec; cout<<oct 分别表示输出16进制、输出10进制、输出8进制;
  2. cout 默认会删除浮点数结尾的零,而调用cout.setf()将取消这种行为;cout.setf(ios::boolalpha)输出bool变量时显示true和false而不是1和0;setf(ios_base::fixed)将对象至于使用定点数的模式;setf(ios_base::showpoint)将对象至于显示小数点的模式,即使小数部分为0;方法 precision() 指定显示多少位小数;方法 width() 设置下一次输出操作的字段宽度,但只在下一次有效,然后恢复默认,默认为0,意味着刚好能容下要显示的内容;

第三章 处理数据

  • 信息要存储需要知道:
  1. 存在哪
  2. 存什么值
  3. 存的类型

C++变量命名及初始化

  • 变量命名规则:
  1. 名称只能使用字母字符数字下划线
  2. 名称第一个不可以是数字
  3. 区分大小写
  4. 不能使用C++关键字(保留字)
  5. 两个下划线或下划线+大写字母的名称被留给实现使用(编译器及其使用的资源);一个下划线开头的名称被保留给实现,用作全局标识符;如果使用这样的变量名(如_time)不会导致编译器错误,但会导致行为不正确
  6. C++对于名称长度无限制,但有些平台有限制;ANSI C(C99标准)只保证前63个字符有意义
  • 变量初始化:
  1. C语言方法:int a = 1; 或者 int a = {1}; 在C++98也是可行的
  2. C++独有方法:int a(1); 或者 int a{1};
    如果括号不包含任何东西,则默认初始化为0
  • 整型和浮点型统称为算术类型

C++基本数据类型 – 整形

  • char , short , int , long , long long(C++11新增),其中还分为有符号singed和无符号unsigned两种;对这些类型的基本要求如下,这些定义根据不同系统各不相同,头文件climits(老式实现中为limits.h)包含了关于整形的限制信息,如下图所示;通常int类型的长度被设置为“自然”的长度,即计算机处理起来效率最高的长度;
  1. char为一个字节
  2. int 至少与short一样长
  3. long至少32位,且至少与int一样长
  4. long long至少64位,且至少与long一样长

在这里插入图片描述
在这里插入图片描述

8bit = 0 ~ 256 或者 -128 ~ 127
16bits = 0 ~ 65536 或者 -32768 ~ 32767
32bits 最长 4 294 672 296 个值
64bits 最长 18 446 744 073 709 551 616 个值

  • 无符号和有符号整数超过最大值或最小值时将会上溢或下溢,如下图所示
    Alt text |  center

  • 整型常量,0x开头表示十六进制,0开头表示8进制,没有开头表示十进制;整数后面带L后者l后缀的表示为long型,带u或者U后缀的表示unsigned int类型,ul(大小写任意)表示unsigned long型,C++提供了llLL表示long long型、ull Ull uLL ULL表示unsigned long long

  • 字符常量:使用单引号引起来;转义序列如下图;
    Alt text|center

  • 通用字符名类似于转义序列,通用字符名以 \u 或 \U 打头,\u后面8个16进制位,\U后面16个16进制位,这些位表示的是字符的ISO 10646码点,这就扩展了原字符集;

  • Unicode也提供了一种表示各种字符集的解决方案,且ASCII为Unicode编码的子集

  • char型在默认情况下不区分有无符号,是否有无符号由C++实现决定,确保编译器开发人员将这种类型和硬件属性匹配起来;

  • 对于大型字符集的表示有两种方法:
    1.将char定义为16位或更长的字节
    2.使用2字节的wchar_t类型,此类型与另一种整形(底层underlying类型)的长度和符号属性相同;不能使用cin和cout来输出wchar_t数据,cin和cout将其看为char流数据,可以使用wcinwcout来处理wchar_t数据流

  • C++11 新增了char16_tchar32_t,两者都为无符号类型;使用前缀u表示char16_t类型,使用前缀U表示char32_t类型,如u'C'U"be good";与wchar_t一样,char16_t和char32_t也都有底层类型,此底层类型跟随系统变化;

  • 布尔型bool变量的值可以为truefalse;过去C++和C都将非零值解释为true,将0解释为false,因而字面值true可以通过提升转换为int值1,而false转换为int值0,反过来任何数值或者指针值都可以隐式转换为bool值

C++常量及const限定符

  • 定义常量类型,C语言使用#define定义常量,编译时将所有出现的常量名替换为定义的内容,C++新增了const限定符来定义常量,定义好后就不可修改;定义常量一般将常量名首字母大写;const声明时就要进行初始化,否则该常量值不确定且不可修改; const相比于#define的优势:
  1. 能够明确指定类型
  2. 通过作用域将定义限制在特定的函数或文件中
  3. 可以将const用于更复杂的类型
  • 为防止函数修改内容,可以使用const修饰参数;const数据和非const数据的地址可以赋给指向const的指针,但只能将非const数据的地址赋给非const指针,因此尽量使用const修饰指针参数;使用const引用使函数能够正确生成并使用临时变量;

C++基本数据类型 – 浮点型

  • 浮点数基于二进制,缩放因子是2,可以用小数点法(0.12345)示可以用E表示法(1.2345E-1),E表示法确保数字以浮点格式存储,既可以使用E也可以使用e,但数字中不能有空格;
  • 浮点类型:floatdoublelong double,有效位指数字中有意义的位,float至少32位,double至少48位且不少于float,long double至少和double一样多,三种类型有效位数可以一样多,通常float 32位double 64位long double 80、96或128位,这三种类型的指数范围至少是-37 - 37,可从头文件cfloat查看;float确保至少有6位有效位,而double确保至少有15位有效位;
  • 浮点常量,一般的浮点数都是double类型,加了后缀f或者F的位float类型,加了后缀l或者L的为long double类型

C++算术运算符及其优先级和结合性

  • C++算术运算符:+ - * / %;运算符重载
  • 运算符优先级和结合性如下;
    @运算符优先级和结合性|center

C++的类型转换

  • C++自动进行类型转换的情况:
  1. 将一种算术类型的值赋给另一种算术类型的变量
  2. 表达式中包含不同的类型时
  3. 将参数传递给函数时
  • 潜在的数值转换问题:
  1. 将较大的浮点类型转换为较小的浮点类型(如double->float),将导致精度降低且有可能超出目标类型范围
  2. 将浮点型转化为整形,将导致小数部分丢失且有可能超出目标类型范围
  3. 将较大整形赋值给较小整形,将有可能导致超出目标类型范围
  • 整形提升:
  1. bool、char、unsigned char、signed char、short值转换为int型;
  2. 如果short和int一样长,则unsigned short 转换为unsigned int
  3. wchar_t被转换为第一个宽度足够存储的类型:int、unsigned int、long、unsigned long
  • 有符号类型级别从高到低为:long long、long 、int、short、signed char,无符号排序与有符号相同,类型char、unsigned char、signed char级别相同,类型bool级别最低,wchar_t、char16_t、char32_t的级别与其底层类型相同

C++校验表:
(1) 一个操作数为long double,其他转换为long double;
(2) 否则,有一个为double,其他转换为double;
(3) 否则,有一个为float,其他转换为float;
(4) 否则,所有操作数都是整形,进行整形提升;
(5) 如果都是有符号或无符号整形,将级别低的整形提升为级别高的整形,如:unsigned int , unsigned short =>unsigned int;
(6) 一个有符号,一个无符号,且无符号级别高于有符号,则有符号变为无符号所代表的的类型,如:unsigned int , signed short => unsigned int;
(7) 否则,有符号可以代表所有无符号的取值,无符号转换为有符号所属类型,如:int , unsigned char => int;
(8) 否则,两个操作数都转换为有符号类型的无符号版本,如:int , unsigned int => unsigned int。

  • 强制类型转换:C语言采用**(typeName)value方式;C++新增typeName(value)方式,主要为了向类方法样式靠拢;static_cast<typeName> (value)**是C++引入的更为严格的一种强制转换方式;

C++中的auto声明

  • **auto**可以让编译器根据初始值推断变量类型,如:auto a = 3,则a为int型,这属于C++11的新特性,C++98表示变量的存储方式,详细见后面章节;

猜你喜欢

转载自blog.csdn.net/hzt12345hf/article/details/84303400
今日推荐