您的位置:首页 > 编程语言 > C语言/C++

《C++核心思想》学习笔记(1)

2015-08-14 16:36 330 查看
第一章 简介

1、测试程序;

2、防错编程——结构化编程技术;

3、如何有效地使用调试器(debugger);

 

第二章 基本数据类型

1、引入有意义的符号名(具有描述性);

2、变量在定义声明时进行“初始化”是一个好的程序设计习惯;

3、空白字符(空格、制表符、回车)用来分割数字的输入;

4、“坦白讲,cin输入并不适用于与用户进行交互,它非常适合于从文件中读取数据,并且对程序来说非常简单!”;

5、键盘输入时带缓冲的。只有当用户键入回车键后,用户的输入才会被处理!(4、5详见程序coins2.cpp)

#include <iostream>

using namespace std;

int main()
{
cout << "How many pennies do you have? ";
int pennies;
cin >> pennies;

cout << "How many nickels do you have? ";
int nickels;
cin >> nickels;

cout << "How many dimes do you have? ";
int dimes;
cin >> dimes;

cout << "How many quarters do you have? ";
int quarters;
cin >> quarters;

double total = pennies * 0.01 + nickels * 0.05
+ dimes * 0.10 + quarters * 0.25;
/* total value of the coins */

cout << "Total value = " << total << "\n";

return 0;
}

6、static_cast <type_name> (expression)强制类型转换;

7、不要使用幻数,影响程序代码可读性,可以使用常量定义,还方便了程序维护,

          Eg: const  double  VOLUME  =  30;

8、cin>>读入以空白字符分割的字符串;

   getline()读入回车之前的所有字符;

9、str.substr( start, length);

10、字符串连接 “+”;

11、#include<iomanip>

setw(width):设置输出域宽(右对齐);

setprecision():设置精度()小数点后位数;

fixed:固定输出的小数宽度;

setfill(‘ch’):设置填充字符;

注意:setprecision()、fixed、setfill()只需使用一次(如果不想对所有输出都进行这些设定,需要在某些特定需求时重新设定,eg:setfill(‘空格’),另外setfill()是与setw()配合一起使用,若后续的不再设定setw(),则也不再填充!),所有流将保持所指定的格式;而setw()需要在每次输出时都要设定一次!

 

第四章 基于控制流程

1、处理一组输入时:

一定要先测试输入是否失败.fail(),再测试.eof()!

Eg:
bool more=true; //利用bool变量
while (more)
{
cin >> next;
if (cin.fail())
{
more = false;
if (cin.eof())
cout << "end data!" << endl;
}
else
highest = next;
}
2、p105循环不变式!

 

第七章 高级控制流

1、表达式cin>>word的值为cin,而对cin进行测试与测试!cin.fail()相同!         Eg:while(cin>>word){    }

2、string line;

while(getline(cin,line))

{

Process  line;

}

循环测试部分利用getline函数返回cin的引用这一特性来测试cin是否处于失败状态!

2、p213,第七章,输入输出重定向,和管道,以及两者的组合使用!

http://blog.csdn.net/zww0815/article/details/7953058

http://www.cnblogs.com/hjslovewcl/archive/2011/01/10/2314356.html

 

4、#include<cstdlib>    int r=rand()    产生的是伪随机数,并不是绝对意义上的随机数,产生的伪随机数本质上是由公式计算生成的!

5、模拟实验模式本质:

(1)在一个循环中生成大量样本,并记录每个试验样本的特定观察值;

(2)模拟结束时,打印观察值的平均值;

Eg:模拟银行的客户排队模型!(在计算机中模拟客户的到达和交易情况)

6、返回一个随机整型数:(a到b之间)

return  a + rand()%( b - a +1);

返回一个随机浮点数:(a到b之间)

return  a +(b - a)* (rand()*(1.0 / RAND_MAX));

第五章 函数

1、一个通用的程序设计原则是:函数除了返回值以外,不要留下其他任何痕迹。

(1)如果输出信息,那么这种函数在没有输出流的环境中使用就没有任何意义,例如图形程序或是银行的柜员机控制程序。

(2)若是输出错误信息(eg:cout<<”Bad value!”),这将会严重限制函数的重用!

A.这样的函数只能用于使用cout输出的程序,而不能用于图形程序;

B.只能用于用户可见输出的应用程序中,而不能用于后台处理的程序中;

★注:如果程序必须要有输入/输出信息,要么将这些输入输出操作组织在一起,要么放在main函数中!让函数只做计算,不要报告信息!

2、在调用函数时,引用参数必须绑定到某个变量上,而值参数却可以绑定到任何的表达式!滥用引用参数,会限制调用方式!也绝对禁止将引用绑定到表达式上!(P130)

3、常量引用!

http://www.cnblogs.com/charley_yang/archive/2010/12/14/1905161.html

http://www.cnblogs.com/lbsx/archive/2009/08/28/1555581.html

4、利用全局变量在不同函数之间传递数据并不是一种好的方式。应该在程序中尽量避免使用全局变量。

★注:如何避免使用全局变量?答案是使用类和参数来代替全局变量。因为总是可以通过函数参数来完成函数间数据的传递。如果函数需要访问多个变量,传统的参数传递比较麻烦。在这种情况下,可以利用类将相关的这一组变量封装在一起!

5、Assert宏机制处理异常:

assert(expression);

如果表达式为真,则什么都不做;否则,则终止程序,显示当前出错的文件、代码行号、和表达式!

对于文本程序,错误信息显示在终端屏幕上;对于图形程序,错误信息则显示在对话框中!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++