变量和基本类型

七、枚举

枚举不但定义了整数常量集,并且还把它们聚集成组。 枚举与简单的const常量相比孰优孰劣, 通过以下一段代码。 一看便知:

  1. enum {input, output, append};
  2. const int input = 0;
  3. const int output = 1;
  4. const int append = 2;
enum {input, output, append};

const int input = 0;
const int output = 1;
const int append = 2;

1、定义并初始化枚举

  1. //默认地,第一个枚举成员赋值为0,后面每一个枚举成员赋的值比前一个大1.
  2. enum open_modes{input,output,append};
	//默认地,第一个枚举成员赋值为0,后面每一个枚举成员赋的值比前一个大1.
enum open_modes{input,output,append};

2、枚举成员是常量

用来初始化枚举成员的值必须是一个常量表达式,常量表达式是编译器在编译时就行计算出结果的整数表达式。

枚举成员值能够是不唯一的:

  1. enum Points {point2d = 2,point2w,
  2. point3d = 3,point3w
  3. };
  4. Points a = point3w;       //正确
  5. Points a = 4;     //错误
	 enum Points {point2d = 2,point2w,
point3d = 3,point3w
};
Points a = point3w; //正确
Points a = 4; //错误

八、类类型

C++中,通过类来自己定义数据类型。

类定义了该类型的对象包括的数据和该类型的对象能够运行的操作。

1、从操作開始设计类

在定义类时,一般是先定义类的接口。即该类所提供的操作,通过这些操作。能够决定该类完毕其功能所须要的数据,以及是否须要定义一些函数来支持该类的实现。

定义Sales_item类:

  1. class Sales_item
  2. {
  3. public:
  4. //...
  5. private:
  6. std::string isbn;
  7. unsigned units_sold;
  8. double revenue;
  9. };//不要忘记分号
class Sales_item
{
public:
//... private:
std::string isbn;
unsigned units_sold;
double revenue;
};//不要忘记分号

2、public与private訪问标号控制类的成员在类外能否够訪问。

3、类的数据成员定义了该类类型对象的内容。

4、一般,不能把类成员的初始化作为其定义的一部分!。。

5、类的成员函数能够使用类的不论什么成员,而无论其訪问权限。而不是类的组成部分的代码不能訪问private成员!

6、用class和structkeyword定义类的唯一差别在于默认訪问级别!

  1. //P57 习题2.28,编译下列程序,注意出错信息
  2. class Foo
  3. {
  4. //empty
  5. }
  6. int main()
  7. {
  8. return 0;
  9. }
//P57 习题2.28,编译下列程序。注意出错信息
class Foo
{
//empty
} int main()
{
return 0;
}

九、编写自己的头文件

为了实现程序能够由多个文件组成。C++支持分别编译!

1、头文件一般包括:类的定义,extern变量声明和函数的声明

2、头文件的正确使用可以带来的优点:

1)可以保证全部文件使用给定实体的同一个声明。

2)当声明须要改动时。仅仅有头文件须要改动。

P58《编译和链接多个源文件》很好,值得一读。

3、头文件用于声明而不是定义

例外情况:

1)头文件能够定义类

2)值在编译时就已知的const对象

3)inline函数

【这些实体能够在多个文件里定义,仅仅要每一个源文件里的定义是同样的】

4、一些const对象定义在头文件里

1)const变量默认是定义在该变量的文件的局部变量,因此,同意const变量定义在头文件里。

并且,常量表达式是编译器在编译的时候就行计算出结果的表达式。

2)在实践中,大部分的编译器在编译时都会用对应的常量表达式来替换这些const变量的使用,所以,在实践中,不会有不论什么的存储空间用于存储用常量表达式初始化的const对象。

3)假设const对象不是用常量表达式初始化的。那么他就不应该在头文件里定义。相反的,他的变量就应该和其它变量一样。在源文件里定义并初始化。而应该在头文件里加入extern生命。以使其可以被多个文件共享。

  1. //P60习题2.32 下列哪些语句应该放在源文件里,哪些引该放在头文件里?
  2. int var;
  3. const double PI = 3.1415926;
  4. extern int total = 255;
  5. const double sq = squt(2.0);
//P60习题2.32 下列哪些语句应该放在源文件里,哪些引该放在头文件里?
int var;
const double PI = 3.1415926;
extern int total = 255;
const double sq = squt(2.0);

5、避免多重包括

1)、在设计头文件时,应该使其能够多次包括在同一个源文件里。我们必须保证多次包括同一个头文件不会应其该头文件的定义的类和对象被多次定义。通常我们须要使用头文件保护符(header guard)

2)、#define表示接受一个名字并定义改名作为预处理器变量

3)、为了保证头文件在更定的源文件里仅仅处理过一次,我们首先检測#ifndef,假设预处理器没有定义。那么跟在其后的全部指示都会被处理。直到#endif,假设#ifndef发现SALESITEM_H已经定义,那么程序会忽略该头文件的剩余部分。

4)、头文件应该含有保护符。

5)、我们能够用定义在头文件中面的实体(如类)来命名处理器变量来避免处理器变量重名的问题!

  1. #ifndef SALESITEM_H
  2. #define SALESITEM_H
  3. //...
  4. #endif // SALESITEM_H
#ifndef SALESITEM_H
#define SALESITEM_H
//...
#endif // SALESITEM_H

6、使用自己的头文件

  1. /*
  2. * 标准头文件。编译器将会在提前定义的位置来查找该头文件,
  3. *当然该位置能够通过设置设置查找路径变量或者通过命令行选项来改动
  4. */
  5. #include <standard_header>
  6. /*
  7. *假设文件名称包括在””中。表名是非系统头文件,
  8. *非系统头文件的查找通常開始于源文件所在路径
  9. */
  10. #include "my_file.h"

C++ Primer 学习笔记_5_变量和基本类型(续2)的更多相关文章

  1. 02.第二章_C++ Primer学习笔记_变量和基本类型

    2.1  基本内置类型 2.1.1  算术类型 算术类型包括两类:整型和浮点型 2.2  变量 2.3  复合类型 2.4  const限定符 2.5  处理类型 2.6  自定义数据结构

  2. (C/C++学习笔记) 九. 变量的存储类型

    九. 变量的存储类型 ● 变量的存储类型(见附页) ● 注释 ①对于自动变量,它属于动态存储方式. 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式.由此看来,一个 ...

  3. C++ Primer学习笔记(三) C++中函数是一种类型!!!

    C++中函数是一种类型!C++中函数是一种类型!C++中函数是一种类型! 函数名就是变量!函数名就是变量!函数名就是变量! (---20160618最新消息,函数名不是变量名...囧) (---201 ...

  4. C++ Primer学习笔记(二)

    题外话:一工作起来就没有大段的时间学习了,如何充分利用碎片时间是个好问题. 接  C++ Primer学习笔记(一)   27.与 vector 类型相比,数组的显著缺陷在于:数组的长度是固定的,无法 ...

  5. ES6学习笔记之变量的解构赋值

    变量的解构赋值 ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构. 数组的解构赋值 以前,为变量赋值,只能直接指定值: 1 2 3 var a = 1; var b = 2; ...

  6. C++ Primer 第2章 变量和基本类型

    C++ Primer 第2章 变量和基本类型 C Primer 第2章 变量和基本类型 1 基本内置类型 算数类型 类型转换 字面值常量 2 变量 变量定义 3 复合类型 引用d左引用 指针d 4 c ...

  7. 批处理学习笔记3 - 变量声明和goto代替while循环

    批处理中没有while循环,只能用goto代替.下面是代码 @echo off set /a i = 0 :again echo %i% set /a i= %i% + 1 if %i% lss 10 ...

  8. C++ Primer 学习笔记_Chapter4 数组和指针–指针

    一.什么是指针? 指针与迭代器一样,指针提供对其所指对象的间接访问,指针保存的是另一个对象的地址: string s("hello"); string *ps = &s; ...

  9. Typescript学习笔记(一)基础类型

    为了面向ng2和前端未来,开始搞向ts,ts是微软出的一枚语言,作为es6的超集,他出的一些特性还是蛮好用的(略坑).对于我等纯前端(从开始就接触javascript)的人来说,真想说,这特么什么鬼. ...

随机推荐

  1. Java引用jar的优化

    一般java的类文件开头都是各种引用: 如 上图的引用可以写成

  2. Moto P30(XT1943-1) 免解锁BL 免rec 保留数据 Magisk Xposed ROOT 救砖 ZUI 4.0.374

    >>>重点介绍<<< 第一:本刷机包可卡刷可线刷,刷机包比较大的原因是采用同时兼容卡刷和线刷的格式,所以比较大第二:[卡刷方法]卡刷不要解压刷机包,直接传入手机后用 ...

  3. 初始MongoDB------MongoDB的安装

    MongoDB在Windows的安装是很简单的,无论是安装包还是绿色包,安装出来的都是这些文件   重点是Bin中的东西   特别是前两个的执行文件 mongod进程就是启动MongoDB数据库的进程 ...

  4. cms判断写法

    cms比较容易写出循环的网页内容,对于有些循环的网页内容有不同css设定,这样在写cms时需要对循环做出条件判断:{if 判断条件}输出内容{else}输出内容{/if}.通过判断可以实现图片轮播效果 ...

  5. 移动web——bootstrap模板

    基本概念 1.bootstrap就是在媒体查询技术出现以后才开始出现的 2.此技术使响应式开发变得十分轻松,最大特点就是栅格系统(什么设备上如何显示)以及响应式工具(是否可见) 基本模板 <!D ...

  6. 关于java 关键字enum不识别的解决办法

    从别人那儿拷贝过来的myeclipse java工程,打开一看标红了一大片,仔细一看,原来是不识别enum关键字,这就有点尴尬了. 我自己重新建了一个java工程,测试了下,假如我在新建工程的时候选择 ...

  7. Zabbix 监控redis

    Zabbix 监控redis 1.监控脚本,github上的 [root@localhost ~]# cat /etc/zabbix/script/redis-status.sh #!/bin/bas ...

  8. Android Service初解

    Service是什么呢? 他同Activity相比,最大的不同就是他没有专门的Layout展示界面,他默默的工作在App的后台. 虽然除了少数几种情况,我们不需要使用Service,但我们也有必要了解 ...

  9. 移动的 touch事件中的touches、targetTouches和changedTouches

    touches: 当前屏幕上所有触摸点的列表; targetTouches: 当前对象上所有触摸点的列表; changedTouches: 涉及当前(引发)事件的触摸点的列表 通过一个例子来区分一下触 ...

  10. API 接口监控产品全新改版,免费开放全部功能

    作为 EOLINKER 研发管理体系的重要一环,EOLINKER 接口监控即 AMT 产品将在 3月4日 迎来全新变化,AMT 产品将正式命名为 EOLINKER-API Beacon --API-烽 ...