《Primer C++ 3rd》读书笔记1

来源:互联网 发布:少年不识愁滋味 知乎 编辑:程序博客网 时间:2024/04/30 03:51

第一章和第二章之前已经读过了,这里写出里边比较容易忘记的地方。总的说着两章都是介绍性质的。

第一章

解决问题的一般方法:分而治之和逐步求精 divide and conquer and stepwise refinement。有时候分析得出的步骤和现实中的操作步骤不同,这主要是因为现实和计算机中的虚拟空间的条件所致。步骤既是算法。

函数份由四部分组成:返回类型、函数名、变量表、函数体。前三项合称为函数原形。在声明函数的时候要写出函数原形,定义函数的时候当然都要写清楚。

程序有main()函数开始,逐项执行期其内容,直到遇到main()中的return()函数。return()为c++预定义函数,当遇到他的时候函数中止执行。c++标准中,若main()中没有显示提供返回语句,则它的缺省返回值是0。

预处理命令中,包含头文件时,<>指要包含的头文件是一个工程或者标准库中的头文件,编译器会在于定义的目录下查找这个文件;""指要包含的是一个用户提供的头文件,编译器会首先在当前文件目录查找。

由于头文件可以嵌套使用,所以为防止重复载入头文件,通常在定义的头文件中加入如下语句:
#ifndef BOOKSTORE_H
#define BOOKSTORE_H
     /* Bookstore.h contents go here */
#endif
这些语句在当两个头文件检查的预处理常量不同的时候可以有效使用This strategy works well provided that no two header files necessary for inclusion test on a preprocessor constant of the same name,所以要注意BOOKSTORE_H这样的预处理器常量名的选择的唯一性。

编译时可以在编译器中通过命令行定义预处理器常量,在外部完成选择性编译。

编译c++程序时,编译器会自动加入__cplusplus(two underscores)预处理器名(preprocessor name);而在c代码中加入__STDC__预处理器名。

编译器还会在编译时加入__LINE__当前编译的行数,__FILE__当前编译的文件名,__TIME__格式:hh:mm:ss,__DATE__格式:月(英文缩写)日 年。

以上这些编译器名都可在程序中使用,比如
#ifdef __cplusplus
   // ok: we're compiling C++
   // we'll explain extern "C" in Chapter 7!
   extern "C"
#endif
   int min( int, int );

if ( element_count == 0 )
     cerr << "Error: " << __FILE__
          << " : line " << __LINE__
          << "element_count must be non-zero./n";

assert.h用处很大,在c++标准中使用cassert来引用。

/*...*/注释不可以嵌套。如必要可以在内部/*之间加入空格来解决。

注意这一段:
#include <iostream>
#include <fstream>
#include <string>
int main()
{
   ofstream outfile( "out_file" );
   ifstream infile( "in_file" );
  
   if ( ! infile ) {
        cerr << "error: unable to open input file!/n";
        return -1;
   }

   if ( ! outfile ) {
        cerr << "error: unable to open output file!/n";
        return -2;
   }
  
   string word;
   while ( infile >> word )
           outfile << word << ' ';
   return 0;
}
1、 fstream本身就包含了iostream,这样既重复了,但是由于有了前面的预处理条件,所以不会有问题。
2、通过return和条件语句实现main()的结束,一共可以有多个return,但每个条件只有一个return。
3、infile、outfile都是对象,如读入文件成功则非零,if(!infile)可以用来判断读取文件是否成功。

本章其他内容都会在后边章节展开,所以这里就不多写了