第二章笔记  (貌似记得有点多)

 

把负值赋给unsigned对象时完全合法的,其结果是该负数对该类型的取值个数求模后的值   -1     (对265求模)  255
 
float型只能保证6位有效数字,而double型至少可以保证10位有效数字
 
定义长整形时,应该使用大写字母L。小写字母l很容易和数值1混淆
 
L‘a'在字符字面值前加L就能够得到wchar_t(扩张字符集,比如汉字和日语)类型的宽字符字面值
 
在一行的末尾加一反斜杠(\)符号可将此行和下一行当作同一行处理。
不允许\后面有注释或空格
 
本书,对象是内存中具有类型的区域。不管是内置类型还是类类型。
 
标识符不能包含两个连续的下划线__,也不能以下划线开头后面紧跟一个大写字母_A
 
*******初始化 != 赋值**************************
初始化:创建变量并给它赋初始值
赋值:擦除对象的当前值并用新值代替
 
直接初始化 int ival (1024);更灵活且效率高
复制初始化 int ival = 1024;
 
构造函数:定义如何进行初始化的成员函数
 
string all_nines(10,'9');//all_nines = "9999999999"
 
当定义没有初始化式的变量时,系统有时候会帮我们初始化变量。
系统提供什么样的值取决于变量的类型,也取决于变量的定义
 
内置类型变量在函数体外定义的变量都初始化成0,
在函数体里定义的内置类型变量不进行自动初始化。
 
永远不要依赖未定义行为
 
建议内置类型的对象都有初始化(容易、安全
 
类有默认构造函数,定义类变量时不用显式地初始化变量。
 
定义:用于为变量分配存储空间,还可以为变量指定初始值。变量有且仅有一个定义 int a = 1;
 
声明:用于向程序表明变量的类型和名字。 int a;
 
定义也是表明:当定义变量时我们表明了它的类型和名字
 
extern声明变量名而不定义它。(声明不是定义,不分配存储空间)
说明定义在程序的其他地方 extern int i;
 
*******程序中变量可以声明多次,但只能定义一次******
 
如果声明有初始化,那么它可被当作是定义
extern double pi = 3.1416 //definition
 
const把一个对象转换成一个常量
const int bufSize = 512;
常量在定义后就不能被修改,所以定义时必须初始化。
 
//file_1.cc
int counter;
//file_2.cc
extern int counter;
在全局作用域声明的const变量是定义该对象的文件的局部变量。
此变量只存在于那个文件中,不能被其他文件访问。
要使const变量能够在其他的文件中访问,必须显式地指定它为extern。
//file_1.cc
extern const int buffer = 1024;
//file_2.cc
extern const int buffer;
 
引用(reference)就是对象的另一个名字(别名)。主要用作函数的形式参数。
复合类型(compound type)指用其他类型定义的类型。
不能定义引用类型的引用,但可以定义任何其他类型的引用。
int ival = 1024;
int &refVal = ival;//ok:refVal refers to ival
int &refVal2;       //error:a reference must be initialized
int &refVal3 = 10;//error:initializer must be an object
 
const引用
const int ival = 1024;
const int &refVal = ival;
 
int i = 42;
// legal for const references only
const int &r = 42;
const int &r2 = r + i;
同样的初始化对于非const引用是不合法的。
 
double dval = 3.14
const int &ri = dval;
        
        ↓
int temp = dval; // create temporary int from the double
const int &ri = temp; // bind ri to that temporary
 
const引用(只读)可以绑定到不同但相关的类型的对象或绑定到右值
 
typedef定义类型的同义词---------&定义变量的同义词
typedef double wages; // wages is a synonym for double
typedef wages salary;  // indirect synonym for double
 
enum指出  值是相关联的
// input is 0 ,output is 1,and append is 2
enum open_modes {input ,output,append};
 
不能改变枚举成员的值。枚举成员本身就是一个常量表达式
 
枚举类型的对象的初始化或赋值,只能通过其枚举成员或同一枚举类型的其他对象来进行
 
enum Points {point2d,point2w,point3d,point3w};
 
Points pt3d = point3d; //ok:point3d is a Points enumerator
Points pt2w = 3;        //error:pt2w initialized with int
pt2w = polygon;        //error:ploygon is not a Points enumerator
pt2w = pt3d             // ok:both are object of Points enum type
 
类(自定义类型)定义了该类型的对象包含的数据和该类型的对象可以执行的操作。
 
每个类都定义了一个接口(interface)和一个实现(implementation)
 
接口(先定义):由使用该类的代码需要执行的操作组成
实现:一般包括该类所需要的数据。还包括定义该类需要的但不提供一般性使用的函数。
定义类时,通常先定义该类的接口,即该类所提供的操作。通过这些操作,可以决定该类完成其功能所需要的数据,以及是否需要定义一些函数来支持该类的实现。
 
成员 = 操作称为成员函数 + 数据称为数据成员
 
访问标号 public private
 
类不是在类定义里定义数据成员时初始化数据成员,而是通过构造函数的特殊成员函数控制初始化。
 
struct也可以定义类
用class 和 struct 定义类的唯一区别在于默认访问级别:
默认情况下,struct的成员为public
                而class的成为为private
 
编译头文件需要一定的时间---->>>>预编译头文件
 
头文件用于声明而不是用于定义
double fica_rate  // no extern ,so it's a definition
 
extern double fica_rate 声明
 
头文件不应该含有定义这一规则,有三个例外
1.定义类
2.值在编译时就已知道的const对象
3.inline函数
 
const对象默认定义它的文件的局部变量
 
****当我们在头文件中定义了const变量后,每个包含该头文件的源文件都有了自己的const变量,其名称和值都一样。
 
当该const变量是用常量表达式初始化时,可以保证所有的变量都有相同的值。但是在实践中,大部分的编译器在编译时都会用相应的常量表达式来替换对这些const变量的使用。所以,在实践中不会有任何存储空间用于存储用常量表达式初始化的const变量。
 
如果const变量不是用常量表达式初始化,应在头文件中为它添加extern声明,以使其能被多个文件共享。
 
 
#include 设施是C++预处理器(preprocessor)的一部分。
预处理器处理程序的源代码,在编译器之前运行
 
#include 指示只接受一个参数:头文件名。
预处理器用指定的头文件的内容替代每个#include
 
头文件保护符(header guard)避免在已经见到头文件的情况下重新处理该头文件的内容。
 
保证多次包含同一头文件不会引起该头文件定义的类或对象被多次定义。
 
#inndef  SALESITEM_H
#define  SALESITEM_H
// Definition of Sales_item class and related function goes here
#endif
 
头文件应该含有保护符,即使这些头文件不会被其他头文件包含。
 
可以用定义在头文件里的实体(如类)来命名预处理器变量来避免预处理器变量重名的问题。
 
<头文件> 标准头文件   编译器在预定义的位置集查找该头文件
“头文件” 非系统头文件  查找通常开始于源文件所在的路径 

c++ primer 笔记 (二)的更多相关文章

  1. C++Primer笔记二

    真是一本好书,就这么点,就感觉学到很多了,当然也是我水平太差. 用shell或者bash的时候有一个文件重定向,就是每次程序运行的时候,我们都需要手动输入内容,然后程序输出内容,这时可以用文件来代替. ...

  2. C++ Primer笔记

    C++ Primer笔记 ch2 变量和基本类型 声明 extern int i; extern int i = 3.14;//定义 左值引用(绑定零一变量初始值,别名) 不能定义引用的引用:引用必须 ...

  3. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  4. jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}

    笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...

  5. Mastering Web Application Development with AngularJS 读书笔记(二)

    第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...

  6. Python 学习笔记二

    笔记二 :print 以及基本文件操作 笔记一已取消置顶链接地址 http://www.cnblogs.com/dzzy/p/5140899.html 暑假只是快速过了一遍python ,现在起开始仔 ...

  7. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  8. webpy使用笔记(二) session/sessionid的使用

    webpy使用笔记(二) session的使用 webpy使用系列之session的使用,虽然工作中使用的是django,但是自己并不喜欢那种大而全的东西~什么都给你准备好了,自己好像一个机器人一样赶 ...

  9. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  10. 《MFC游戏开发》笔记二 建立工程、调整窗口

    本系列文章由七十一雾央编写,转载请注明出处.  http://blog.csdn.net/u011371356/article/details/9300383 作者:七十一雾央 新浪微博:http:/ ...

随机推荐

  1. Hibernate非主键一对多关联。

    Unit表 id,code User表 id,ucode ...@ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name="ucode" ...

  2. MVC 部分视图:Partial() 、RenderPartial() 、 Action() 、RenderAction() 、 RenderPage() 区别

    在视图里有多种方法可以 加载部分视图,包括: Partial()  Action()  RenderPartial()  RenderAction()  RenderPage() 方法. 以下是这些方 ...

  3. SQL——将表中的最大ID+1插入新的ID中------Insert into 表 MAX(表id) +1

    表结构:group表(groupid int,groupname varchar) 表中数据:id name 分组1 分组2 分组3 分组4 ----------------------------- ...

  4. Guava Immutable 不可变集合

    Immutable是为了创建不可变集合使用,不可变集合在很多情况下能提高系统性能.一般使用 .of()或者.builder()<>().put().build()初始化创建不可变集合

  5. 20155301 2016-2017-2 《Java程序设计》第7周学习总结

    20155301 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 1.例如 Compartor<String>byLength=new Compa ...

  6. android 短信拦截

    android 4+版本需要用户主动添加broadReceiver 1.清单文件 <manifest xmlns:android="http://schemas.android.com ...

  7. 图片和流的相互转化 (c/s)

    //图片转化为流保存: Stream ms; byte[] picbyte; OpenFileDialog open = new OpenFileDialog(); open.Filter = &qu ...

  8. dubbo服务使用spring-data-mongodb进行时间查询的bug记录

    一.项目情况:spring-boot+mongodb+dubbo. 二.问题:调用dubbo服务并使用spring-data-mongodb的gte,lte时间段比较查询, @Reference(re ...

  9. luogu P1627 [CQOI2009]中位数

    传送门 要求有多少个长度为奇数的区间满足某个数为区间中位数 这样的区间,大于中位数的数个数 等于 小于中位数的数个数 用类似于前缀和的方法,设\(X_i\)为\(i\)和数\(b\)形成的区间内,大于 ...

  10. mysql 案例~ mysql故障恢复

    一 :遇到一个朋友的案例 分享下处理流程 二 : 现象 1 mysql无法启动,观察日志发现 InnoDB: Failing assertion: !m_fatal InnoDB: We intent ...