Advertisement

essential c++读书笔记1

阅读量:

第一章 c++编程基础

1.1 如何撰写C++程序

复制代码
    int main()
    {
    	// 我们的程序代码置于此处
    }

关键字(int): 程序语言先行定义的一些具有特殊意义的名称,int用来表示语言内建的整数数据型别。
函数: 一块独立的程序代码序列,能够执行一些运算,包含以下4个部分: 返回值的型别 int,函数名称 main,参数列 ( ),以及函数主体{ }。
1) 函数的返回值: 通常用来表示运算结果。
2) 函数的名称最好能够提供某些信息。
3) 参数列: 函数执行时,调用者可以传给函数的型别列表。
4) 函数的主体: 提供此函数运算的程序代码。

类: 用户自定义的数据型别。class机制让我们得以将数据型别加入到我们的程序中,并有能力识别它们。
欲使用class,我们必须先在程序中含入其头文件。如:
#include
cout << “Please enter your first name:”;
上述一行便是C++的语句。语句是C++程序的最小独立单元。
我们可以使用string来存储name,如:

复制代码
    #include <string>
    string user_name;
    	//一个完整的程序如下:
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(void)
    {
    	string user_name;
    	cout << "Please enter your first name: ";
    	cin >> user_name;
    	cout << "\nHello, "
    		 << user_name
    		 << "... and goodbye!\n";
    
    	return 0;
    }

关于using namespace std;
using和namespace都是C++关键词。std是标准程序库所驻之命名空间的名称。标准程序库所提供的任何事物(例如string class以及cout,cin这两个iostream类对象)都被封装在命名空间std内。
命名空间是一种将程序库名称封装起来的方法。通过这种方法,可以避免和应用程序发生命名冲突的问题(所谓命名冲突是指在应用程序内两个不同的实体具有相同的名称,导致程序无法区分两者。命名冲突产生时,程序必须等到该命名冲突获得决议之后,才得以继续执行)
若要在程序中使用string class以及cin,cout这两个iostream类对象,我们不仅得含入及,还得让命名空间std内的名称曝光。而所谓的using directive:using namespace std;便是让命名空间中的名称曝光的最简单的方法。

1.2 对象的定义与初始化

复制代码
    在单一声明语句中定义多个对象,其间隔以逗号区分,如:

int num_tries = 0, num_right = 0;
另外还有一种不同的初始化语法,称为“构造函数语法”:
int num_tries(0);
为什么会有两种不同的初始化方法呢?解答如下:
以assignment运算符(=)进行初始化,这个操作沿袭C语言。如果对象属于内建型别,或者对象可以单一值加以初始化,这种方式没有问题。例如:
string sequence_name = “Fibonacci”;
但是,如果对象需要多个初始值,这种方式就没办法完成任务了。以标准程序库中的复数类为例,它就需要两个初始值,一为实部,一为虚部:
#include
complex purel(0, 7);

vector pell_seq(seq_size) 指定pell_seq的值:pell_seq[0] = 1;分别指定;
也可以利用一个已初始化的array作为该vector的初始值。例如: int elem_vals[seq_size]={1,2,3}; vector elem_seq(elem_vals,elem_vals+size);

1.6 指针

指针具有的双重性质:1、既可以让我们操作指针包含的内存地址;2、也可以让我们操作指针所指的对象值。
i = 1024; *p = i; 1、内存地址:&i p 2、对象本身: _p i
指针可能并不指向任何对象。所以必须在提领前先确定它的确指向某对象。 提领操作:取得“位于该指针所指内存地址上”的对象,在指针之前使用_号,便可以达到这个目的。
if(pi && *pi != 1024) {*pi = 1024} 只有pi持有一个非零值,其求值结果才会是true

vector *seq_addr[seq_cnt]={&f,&l,&p,&t,&s,&p}; 这是一个数组,其元素类型为ventor *.

1.7 文件的读写

复制代码
    欲对文件进行读写操作,首先得先含入fstream头文件:

#include
为了开启一个可供输出的文件,我们定义一个ofstream对象,并将文件名传入: //是相对于程序端的输入输出 ifstream <-- 从文件读取数据 – 数据 – 向文件输出数据 --> ofstream
ofstream outfile(“seq_data.txt”);
如果指定的文件并不存在,便会有一个文件被产生出来并开启作为输出之用。如果指定的文件已经存在,这个文件会被开启作为输出之用,而文件中原已存在的数据会被丢弃。
我们可以增加ios_base::app,来表示追加数据。
ofstream outfile(“seq_data.txt”, ios_base::app);
我们必须判断是否成功打开了一个文件:

复制代码
    if (!outfile) {
    	cerr << "Oops! unable to save session data!\n";
    } else {
    	outfile << usr_name << ' ' << num_tries << ' ' << num_right << endl;
    }

endl: 不仅仅换行,而且清空缓冲区。
我们可以通过ifstream来读取文件。
ifstream infile(“seq_data.txt”);

将函数独立出来的做法有以下三个好处:

  1. 以一连串函数调用操作,取代重复撰写相同的程序代码,可使程序更容易读懂。
  2. 可以在不同的程序中使用这些函数。
  3. 更轻易将工作分配给其他团队。

全部评论 (0)

还没有任何评论哟~