ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++ Primer Plus学习笔记

2022-04-05 19:31:54  阅读:202  来源: 互联网

标签:符号 int double long Plus C++ 类型 Primer


C++ Primer Plus

第1章 预备知识

区分扩展名

  • C++程序使用.C或者.cpp作为扩展名,C程序使用.c作为扩展名

  • 对于某些UINX系统,也可使用扩展名cc和cxx

  • DOS不区分大小写

    源代码文件的扩展名
C++实现 源代码文件的扩展名
UNIX C、cc、cxx、c
GNU C++ C、cc、cxx、cpp、c++
Digital Mars cpp、cxx
Borland C++ cpp
Watcom cpp
Microsoft Visual C++ cpp、cxx、cc
Freestyle Code Warrior cp、 cpp、 cc、cxx、c++

第2章 开始学习C++

1、C++语句

  • 语句是要执行的操作
  • C与C++使用终止符(terminator)而不是分隔符
  • 终止符是一个分号(;)符,他是语句结束的标志,是语句的组成部分
有以下类型C++语句
  • 声明语句:定义函数中使用的变量的名称和类型。
  • 赋值语句:使用赋值运算符(=)给变量赋值。
  • 消息语句:将消息发送给对象,激发某种行动。
  • 函数调用:执行函数。被调用的函数执行完毕后,程序返回到函数调用语句后面的语句。
  • 函数原型:声明函数的返回类型、函数接受的参数数量和类型。
  • 返回语句:将一个值从被调用的函数那里返回到调用函数中。

2、C++注释

  • C++注释以//打头,到行尾结束
  • C++也能识别C的注释/**/
  • 尽量使用C++风格注释

3、C++源代码风格

  • 每条语句占一行
  • 每个函数都有一个开始花括号和一个结束花括号,这两个花括号各占一行。
  • 函数中的语句都相对于花括号进行缩进。
  • 与函数名称相关的圆括号周围没有空白。

4、命名约定

有以下几种

  • Myfunction( )
  • myfunction( )
  • myFunction( )
  • my_function( )
  • my_funct( )

选择取决于开发团体、使用的技术或库以及程序员个人的品位和喜好。


第3章 处理数据

1、变量名命名规则

  • 在名称中只能使用字母字符、数字和下划线(_)。
  • 名称的第一个字符不能是数字。
  • 区分大写字符与小写字符。不能将C++关键字用作名称。
  • 以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符。
  • C++对于名称的长度没有限制,名称中所有的字符都有意义,但有些平台有长度限制。

2、变量长度

  • bool,

  • short(short为short int的简称)至少16位(bit),两个字节(bytes),表示范围-3276832767*,*(*即*-2^152^15-1);

  • w_char(宽字符类型),可以表示扩展字符集,是一种整数类型,长度不确定

  • char,1byte=8bit;表示范围不确定,默认情况下无符号,是否有符号有C++实现决定

    • signed char,表示范围-128~127
    char fodo;//可能有符号,可能没符号
    unsigned char bar;//无符号
    signed char snark;//有符号
    
  • C++11新增类型

    • char16_t:无符号,长16位
    • char32_t:无符号,长32位
    • C++11使用前缀u表示u表示char16_t字符串常量和字符常量,如:u'C'和u"be good";前缀U表示char32_t字符串常量和字符常量,如:U'C'和U"be good"
    • 与wchar_t一样,char16_t和 char32_t也都有底层类型——一种内置的整型,但底层类型可能随系统而已。
  • int被设置为对目标计算机而言最为“自然”的长度,自然长度(natural size)指的是计算机处理起来效率最高的长度。int至少与short一样长,4byte=32bit,所能表示范围:-21474836482147483647*;*(*即*-2^312^31-1);

  • long(long为long int的简称)至少32位,且至少与int一样长,4byte=32bit,所能表示范围:-21474836482147483647*;*(*即*-2^312^31-1);

  • long long 至少64位,且至少与long一样长。

  • float,至少32位,指数范围至少是-37到37

  • double,至少48位,且不少于float,指数范围至少是-37到37

  • long double,位80、96或128位,指数范围至少是-37到37

可以从头文件cfloat或float.h中找到系统的限制。

注:wchar_t类型是一种整数类型,它有足够的空间,可以表示系统使用的最大扩展字符集。这种类型与另一种整型(底层(underlying)类型)的长度和符号属性相同。对底层类型的选择取决于实现,因此在一个系统中,它可能是unsigned short,而在另一个系统中,则可能是int。cin和 cout将输入和输出看作是char流,因此不适于用来处理 wchar_t类型。iostream头文件的最新版本提供了作用相似的工具——wcin和 wcout,可用于处理 wchar_t流。另外,可以通过加上前缀L来指示宽字符常量和宽字符串

3、运算符sizeof

可对类型名或变量名使用sizeof运算符。

  • 对类型名(如 int)使用sizeof运算符时,应将名称放在括号内;
  • 对变量名(如n_short)使用该运算符,括号是可选的。
cout << "int is" << sizeof(int) << " bytes.\n";
cout << "short is " << sizeof n_short << " bytes.\n";

4、头文件limits

头文件climits 定义了符号常量来表示类型的限制。INT_MAX表示类型 int能够存储的最大值,对于Windows 7系统,为2147483 647。编译器厂商提供了climits文件,该文件指出了其编译器中的值。例如,在使用16位int 的老系统中,climits文件将INT_MAX定义为32767。下表对该文件中定义的符号常量进行了总结,其中的一些符号常量与还没有介绍过的类型相关。

climits中的符号常量
符号常量 表示
CHAR_BIT char的位数
CHAR_MAX char的最大值
CHAR_MIN char的最小值
SCHAR_MAX signed char的最大值
SCHAR_MIN signed char的最小值
UCHAR_MAX unsigned char的最大值
SHRT_MAX short的最大值
SHRT_MIN short的最小值
USHRT_MAX unsigned short的最大值
INT_MAX int的最大值
INT_MIN int的最小值
UNIT_MAX unsigned int的最大值
LONG_MAX long的最大值
LONG_MIN long的最小值
ULONG_MAX unsigned long的最大值
LLONG_MAX long long的最大值
LLONG_MIN long long 的最小值
ULLONG_MAX unsigned long long的最大值

5、C++11初始化方式

C++11使得大括号初始化器用于任何类型(可以使用等号,也可以不使用),这是一种通用的初始化语法。

int hamburgers = {24};//初始化方式一
int emus{7};//初始化方式二
int rheas = 12;//初始化方式三

6、无符号类型

  • unsigned char:所占内存大小:1byte=8bit;所能表示范围:0255*;*(02^8-1)

  • unsigned(unsigned int):所占内存大小:4byte=32bit; 能表示范围:04294967295*;*(*即*02^32-1)

  • unsigned long: 所占内存大小:4byte=32bit;所能表示范围:04294967295*;*(*即*02^32-1)

7、整型字面值

  • 十进制

    int chest = 10;
    
  • 八进制:前缀为0

    int inseam = 042;
    
  • 十六进制:前缀为0x或0X

    int waist = 0x42;
    
  • 如果要以十六进制或八进制方式显示值,则可以使用cout的一些特殊特性。控制字符dec、oct和hex分别用于指示cout以十进制、八进制和十六进制格式显示整数。

    cout << dec;
    //表示cout显示十进制数
    ......
    cout << oct;
    //表示cout显示八进制数
    ......
    cout << hex;
    //表示cout显示十六进制数
    ......
    

8、确定常量的类型

  • long:后缀为L或l,如:100L
  • unsigned int:后缀为U或u,如:100U
  • unsigned long:后缀为UL(LU,lu,ul),如100ul
  • long long:后缀为LL或ll,如100LL
  • unsigned long long:后缀为ULL(LLU,llu,ull),如100ull

接下来考察长度。在C++中,对十进制整数采用的规则,与十六进制和八进制稍微有些不同。对于不带后缀的十进制整数,将使用下面几种类型中能够存储该数的最小类型来表示: int、long或long long。在 int 为 16位、long 为 32位的计算机系统上,20000被表示为 int 类型,40000被表示为long类型,3000000000被表示为long long类型。对于不带后缀的十六进制或八进制整数,将使用下面几种类型中能够存储该数的最小类型来表示:int、unsigned int long、unsigned long、long long或unsigned long long.在将40000表示为long 的计算机系统中,十六进制数Ox9C40 ( 40000)将被表示为unsigned int。这是因为十六进制常用来表示内存地址,而内存地址是没有符号的,因此,usigned int 比 long更适合用来表示16位的地址。

9、C++转义字符

C++转义字符表
字符名称 ASCII符号 C++代码 十进制ASCII码 十六进制ASCII码
换行符 NL (LF) \n 10 0xA
水平制表符 HT \t 9 0x9
垂直制表符 VT \v 11 0xB
退格 BS \b 8 0x8
回车 CR \r 13 0xD
振铃 BEL \a 7 0x7
反斜杠 \ \\ 92 0x5C
问号 ? ? 63 0x3F
单引号 ' \' 39 0x27
双引号 " \" 34 0x22

10、const限定符

创建常量的通用格式

const type name = value;//在C++中尽量用const取代#define

常量指针:const修饰指针,指针指向可以变,指针指向的值不可以变

const int * p = &a;

指针常量:const修饰的是常量,指针指向不可以变,指针指向的值可以变

int * const p = &a;

const即修饰指针又修饰常量:指针指向不可以变,指针指向的值也不可以变

const int * const p = &a;

11、浮点数的表示

12.34//float
2.52e+8//E的表示法,+可省略,E大小写皆可
-18.32e-13//E的表示法,-不可省略

1)定点表示法

ostream方法 setf(),迫使输出使用定点表示法,以便更好地了解精度,它防止程序把较大的值切换为E表示法,并使程序显示到小数点后6位。参数 ios_base:.fixed 和ios_base::floatfield是通过包含iostream来提供的常量。

#include<iostream>
int main ()
{
    using namespace std;
    cout.setf(ios_base::fixed, ios_base::floatfield);
    //迫使cout输出使用定点表示法,并使程序显示到小数点后6位
    ......
    return 0 ;
}

2)浮点常量

  • float:后缀为f或F,如:1.2f
  • double:默认浮点数都是double,如:8,24和2.4E8
  • long double:后缀为l或L,如1.234L

12、除法分支

  • 整数/整数=整数(小数部分省略)

  • double/double = double

  • double/int = double

  • int/double = double

  • double/double = double

  • float/float = float

13、求模运算

求模符号:%

规则:只能为整数,x(x>=n)与n求模,求模后取值为小于n的整数,如:

//与二求模
	for(int i=1;i<=10;i++){
		//TODO
		cout << i << "%2 = " << i%2 << "  ";//与2求模,求模后取值0,1,为小于2的整数
	}
	cout << endl;
	
	//与三求模
	for(int i=1;i<=10;i++){
		//TODO
		cout << i << "%3 = " << i%3 << "  ";//与3求模,求模后取值0,1,2,为小于3的整数
	}
	cout << endl;

14、类型转换

转换规则

C++11对这个校验表稍做了修改,下面是C++11版本的校验表,编译器将依次查阅该列表:

  1. 如果有一个操作数的类型是long double,则将另一个操作数转换为long double。
  2. 否则,如果有一个操作数的类型是double,则将另一个操作数转换为double。
  3. 否则,如果有一个操作数的类型是float,则将另一个操作数转换为float。
  4. 否则,说明操作数都是整型,因此执行整型提升。
  5. 在这种情况下,如果两个操作数都是有符号或无符号的,且其中一个操作数的级别比另一个低,则转换为级别高的类型。
  6. 如果一个操作数为有符号的,另一个操作数为无符号的,且无符号操作数的级别比有符号操作数高,则将有符号操作数转换为无符号操作数所属的类型。
  7. 否则,如果有符号类型可表示无符号类型的所有可能取值,则将无符号操作数转换为有符号操作数所属的类型。
  8. 否则,将两个操作数都转换为有符号类型的无符号版本。

有符号整型按级别从高到低依次为long long、long、int、short和 signed char。无符号整型的排列顺序与有符号整型相同。类型char、signed char和unsigned char的级别相同。类型bool 的级别最低。wchar_t、char16_t和char32_t 的级别与其底层类型相同。

强制类型转换

(typeName) value;//方法一,C语言版
typeName (value);//方法二,C++版,新格式的想法是,要让强制类型转换就像是函数调用一样
//C++还引入了4个强制类型转换运算符,对它们的使用要求更为严格
statistic_cast<typeName> (value)

15、C++11中的auto声明

C++11新增了一个工具,让编译器能够根据初始值的类型推断变量的类型。为此,它重新定义了auto的含义。auto是一个C语言关键字,但很少使用。在初始化声明中,如果使用关键字auto,而不指定变量的类型,编译器将把变量的类型设置成与初始值相同:

auto n = 100;//n为int
auto x = 1.5;//x为double
auto y = 1.3e12L;//y为long double

显式地声明类型时,将变量初始化0(而不是0.0)不会导致任何问题,但采用自动类型推断时,这却会导致问题。


第4章 复合类型

1、数组

//声明数组
typeName arrayName[arraySize];

表达式arraySize 指定元素数目,它必须是整型常数(如10)或const值,也可以是常量表达式(如8*sizeof ( int)),即其中所有的值在编译时都是已知的。具体地说,arraySize不能是变量,变量的值是在程序运行时设置的。然而,本章稍后将介绍如何使用new运算符来避开这种限制。

未完待续。。。

标签:符号,int,double,long,Plus,C++,类型,Primer
来源: https://www.cnblogs.com/ExclusiveOR/p/16103547.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有