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

 

把负值赋给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
头文件应该含有保护符,即使这些头文件不会被其他头文件包含。
可以用定义在头文件里的实体(如类)来命名预处理器变量来避免预处理器变量重名的问题。
<头文件> 标准头文件   编译器在预定义的位置集查找该头文件
“头文件” 非系统头文件  查找通常开始于源文件所在的路径 

转载于:https://www.cnblogs.com/wincai/p/4218625.html

c++ primer 笔记 (二)相关推荐

  1. C++ primer 笔记(二)

    第9章   sequential container 顺序容器: vector 快速随机访问    list快速插入删除   deque双端,随机访问 C<T> c; C c(c2); C ...

  2. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

  3. oracle直查和call哪个更快,让oracle跑的更快1读书笔记二

    当前位置:我的异常网» 数据库 » <>读书笔记二 <>读书笔记二 www.myexceptions.net  网友分享于:2013-08-23  浏览:9次 <> ...

  4. 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍

    游戏开发笔记二十七 Direct3D 11入门级知识介绍 作者:毛星云    邮箱: happylifemxy@163.com    期待着与志同道合的朋友们相互交流 上一节里我们介绍了在迈入Dire ...

  5. [转载]dorado学习笔记(二)

    原文地址:dorado学习笔记(二)作者:傻掛 ·isFirst, isLast在什么情况下使用?在遍历dataset的时候会用到 ·dorado执行的顺序,首先由jsp发送请求,调用相关的ViewM ...

  6. PyTorch学习笔记(二)——回归

    PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...

  7. tensorflow学习笔记二——建立一个简单的神经网络拟合二次函数

    tensorflow学习笔记二--建立一个简单的神经网络 2016-09-23 16:04 2973人阅读 评论(2) 收藏 举报  分类: tensorflow(4)  目录(?)[+] 本笔记目的 ...

  8. 趣谈网络协议笔记-二(第十九讲)

    趣谈网络协议笔记-二(第十九讲) HttpDNS:网络世界的地址簿也会指错路 自勉 勿谓言之不预也 -- 向为祖国牺牲的先烈致敬! 引用 dns缓存刷新时间是多久?dns本地缓存时间介绍 - 东大网管 ...

  9. 趣谈网络协议笔记-二(第十八讲)

    趣谈网络协议笔记-二(第十八讲) DNS协议:网络世界的地址簿 自勉 勿谓言之不预也 -- 向为祖国牺牲的先烈致敬! 正文 DNS用于域名解析,但也不仅仅是用于域名解析,不仅仅是将域名转换成IP. 在 ...

  10. 趣谈网络协议笔记-二(第十七讲)

    趣谈网络协议笔记-二(第十七讲) P2P协议:我下小电影,99%急死你 自勉 逃离舒适区! 正文 一. P2P协议 整个篇章讲的就是这两个协议之间的区别.P2P协议就是迅雷下载数据时所用的协议, 众所 ...

最新文章

  1. MySQL 学习笔记(1)— 创建/连接/选择/显示数据库(表) 查询单列(多列/所有列)/查询返回特定的行数 各种排序(单列/多列/降序/组合排序) 过滤数据
  2. CentOS7编译安装MySQL5.7之后安装mysql-devel出错解决方案
  3. 公司为何要对薪水保密?
  4. 农村信用社计算机基础知识,2014年云南省农村信用社考试计算机基础知识练习题...
  5. TMS320F28335时钟(1)
  6. 获取淘宝开发平台的sessionKey
  7. 动态修改网页title
  8. 熟练掌握git撤销命令
  9. leveldb - log格式
  10. 6LoWPAN Header compression
  11. 【QGIS】【OsGeo4w】安装方法
  12. 通过java下载B站视频
  13. 3D图形渲染及数字图像处理算法相关文集
  14. 迅雷index.html是什么文件,迅雷看看的缓存文件在哪个文件夹
  15. 呼吸灯在哪里设置苹果_苹果前呼吸灯在哪里设置
  16. 新5G网络架构较复杂 设立面对不少挑战
  17. 查看僵尸进程并杀掉僵尸进程
  18. 教学一体机属于计算机的什么应用,教学一体机被广泛应用
  19. 一个团购安卓APP界面的制作以及细节
  20. 最合适触屏方法 指划修图Snapseed

热门文章

  1. Android LBS系列05 位置策略(一)
  2. Hiv:SQuirrel连接hive配置
  3. Lecture 19 Shortest Paths III
  4. Oracle加密解密
  5. 如何一键部署项目、代码自动更新
  6. bzoj2152 聪聪可可
  7. event对象获取方法
  8. CountDownLatch线程同步辅助
  9. 通过telnet连接查看memcache服务器
  10. EasyUI,二级页面内容的操作