C++优势:不仅提供一些高级的抽象机制,而且根基和C在同一层面;同时可以支持4种不同的编程风格:C风格、基于对象、面向对象和泛型.
C++11出现前的缺陷:缺少自动内存管理和对象级别的消息发送机制.
C++11出现后的优势:增强了语言机制和完善的标准库,为C++语言的编程风格带来了革命性的变化,写出的代码简洁优雅,并引入了各种类型智能指针.
##目录
[第1章 开始]
######Ex1.2 输入和输出
C++语言并未定义任何输入输出语句,而是使用标准库来提供IO机制.具体的输入输出对象请查看标准库提供的IO类.
'std::cout'操作符:向流中写数据(也就是向设备中写数据).
'std::endl'操作符:结束当前行,将缓冲区的数据刷到关联的设备上.
'std::cin'操作符:向流中读取数据(也就是从设备中读取数据).
######Ex1.6
回答:该程序不合法;第二、三行没有输出符对象.
修改方法:1、在第二、三行添加输出符对象;2、将下面两行合并到第一行;
######Ex1.12
回答:该程序完成了从-100到100累加功能;SUM最终的值为0;
######Ex1.13
回答:利用for循环重写while习题,读者自己实现。
######Ex1.14
回答:for循环适合于精细循环次数的场合,优点是运行速度快,基本适合任何循环场合.
while循环就是属于那种对循环体次数要求不是那么精密的场合使用.
######Ex1.15
回答:编译器的错误信息识别,请读者亲自尝试,这里不再赘述.
######Ex1.17
回答:如果输入所有值都是相同的,回车后不会输出任何信息,CTRL+D后输出该数的统计数字;
如果输入的数字没有一个相同,前面N-1个数字输出的次数都是1,但是最后一个数的信息无法输出,CTRL+D后输出最后一个数字的统计次数.
######Ex1.18 Ex1.19
回答:不在赘述.
######Ex1.24
回答:和1.23程序一样.
[第2章 变量和基本类型]
重点:初始化和赋值在C++中是两种不同的概念。变量只能被定义一次,但是可以声明多次(extern 只能在函数体外部声明)
默认初始化:跟变量的类型和位置有关系,如:整型变量在函数体外部被默认初始化为0 ,在函数体内则是未定义。
constexpr如果定义指针,直接把定义的变量置为顶层const;
auto定义的变量必须有初始值,类型要一致;
decltype:选择并返回操作数的数据类型
######Ex2.1
回答:int、long、long long、short都是整型类型,但是它们表示的范围不同,int占用2个字节 16位;long占用4个字节 32位;long long占用8个字节 64位;short占用1个字节 8位.
signed和unsigned表示有符号和无符号类型,它们之间的区别是表示数据的区间不同,如 unsigned int 和 int 类型分别表示区间是 065535 -3276832767
float 和 double都表示浮点类型,但是精度不一样,float精度一般是6位有效数字,double表示10位有效数字
######Ex2.2
回答:应该选择double 或者 long double类型,金融行业对资金的精度要求较高。
######Ex2.3
回答:32;4294967264;32;-32;0;0。
######Ex2.5
回答:char,wchar_t,字符串[char数组{'a','\0'}],宽字符串[wchar_t数组];
int,unsigned int,long,unsigned long,八进制,16进制;
float,float,long dougle;
int,unsigned int,float,科学计数法,保留两位小数;
######Ex2.6
回答:有区别,前面两个数是十进制,后面是八进制,但是month写法错误。
######Ex2.7
回答:"\145"反斜杠\后面三个数字表示字符 e;后面 \012表示换行符;
科学计数法,数据类型long double,float,long double;
######Ex2.9
回答:a) std::cin>>后面是变量或者是对象,不能定义类型;
b) 使用浮点数列表初始化整型变量,由于信息会丢失,编译器会报错;
c) wage未定义的类型,无法参与赋值。
######Ex2.10
回答:"",0,未定义,"";
######Ex2.11
回答:定义,定义,声明 ;
######Ex2.12
回答:c) 错误,只能由字母数字下划线组成,必须以字母或下划线开头 ;d)错误 必须以字母或下划线开头;
######Ex2.13
回答:100;
######Ex2.14
回答:100 45;
######Ex2.15
回答:b d非法,引用必须绑定到对象上,不能绑定字面值,引用不是一个对象,因此无法单独定义;
######Ex2.16
回答:a) 合法 给对象d赋值;b) 合法,将i的值赋值给d c)合法 将d的值赋值给i d)合法 将d对象的值赋值给i;
######Ex2.17
回答:10 10;
######Ex2.19
回答:指针是对象,引用为非对象;
######Ex2.20
回答:i=4242;
######Ex2.21
回答:a)非法,指针的类型和i的类型不一致;b) 非法,不能使用整型对象初始化指针;c)合法;
######Ex2.22
回答:判断指针对象p是否为空值;判断该指针所指向的值是否为空值;
######Ex2.23
回答:无法判断,因为指针对象可以被任意赋值,该地址是否指向合法对象无法判断。
######Ex2.24
回答:void类型的指针可以存放任意对象的地址;但是lp只能存放long类型对象的地址,因此p合法,lp不合法;
######Ex2.25
回答:a) ip是int类型,i是int类型,r是int类型引用;b)i是int类型,ip是int类型;c)ip是int,ip2是int类型;
######Ex2.26
回答:a)不合法,const变量必须被初始化;b)合法;c)合法;d)++sz不合法, const变量不能修改其值
######Ex2.27
回答:a)非法,引用的初始化必须是对象;b)合法,使用int类型的地址初始化int类型的指针;c)合法,const引用绑定常量;d)合法,使用int类型的地址初始化int类型指针;e)合法,将int类型地址拷贝给int*类型指针;
f) r2必须初始化;g)合法,使用i初始化i2,定义i的引用r;
######Ex2.28
回答:a)定义int类型变量,定义int类型的常量指针cp,其中cp必须被初始化;b)定义int类型的指针p1和int类型的常量指针p2,其中p2必须被初始化;
c)定义int类型常量ic,但是ic没有被初始化,定义该常量的引用r;d)定义指向一个常量的int类型的常量指针p3,p3没有被初始化;e)定义一个指向int型常量的指针;
######Ex2.29
回答:a) 合法;b)非法,类型不匹配;c)非法,类型不匹配;d)非法,向只读变量p3赋值;e)非法,向只读变量赋值;f)非法,向只读变量赋值;
######Ex2.30
1、顶层const;2、底层const;3、顶层const;
######Ex2.31
1、非法;2、非法;3、非法;4、非法;5、合法
######Ex2.32
回答:int null=0,*p=&null;
######Ex2.332.352.42
回答:请读者自行实现
回答:请读者自行验证;
######Ex2.36
回答:a、b、c、d的值为4;
######Ex2.37
回答:a、b、c、d的值为3,4,3,3;
######Ex2.38
回答: 1) int a=10;auto b=a;decltype(a) d=a; 2) const int a=10;auto b=a;decltype(a) c=a;
######Ex2.39
错误:结构定义后需要‘;’
######Ex2.40
struct Sales_data{std::string bookNo;unsigned int bookNum;double bookPrice;};
######Ex2.41
[第3章 字符串、向量和数组]
######Ex3.1
回答:忽略
######Ex3.3
回答:string的输入运算会自动忽略开头的空白,从第一个真正的字符开始读起,在下一个空白处结束。
######Ex3.9
回答:合法,输出空字符串
######Ex3.11
回答:合法,const char &类型
######Ex3.12
回答:合法,定义一个vector,其元素为vector;非法,ivec元素的类型与svec元素的类型不一致;合法,使用10个"null"字符串初始化svec;
######Ex3.13
回答:1、0各元素;
2、10个元素,每个元素值为0;
3、10个元素,每个元素的值为42;
4、10个元素,每个元素的值为0;
5、2个元素,每个元素值10,42;
6、10个元素,每个元素值为""
7、10个元素,每个元素的值为"hi"
[第13章 拷贝控制]
[第14章 重载运算与类型转换]
[第15章 面向对象程序设计]
[第16章 模板与泛型编程]
[第17章 标准库特殊设施]
[第18章 用于大型程序的工具]
[第19章 特殊工具与技术]
###MarkDown语法说明 #####代码区段
int main()
{
return 0;
}
#####连接的定义
This is an example inline link.
[id]: http://example.com/ "Optional Title Here"
#####强调
single asterisks
double underscores
#####代码
Use the printf()
function.
#####图片
[id]: url/to/image "Optional title attribute"