Thinking in C++读书笔记(二)---对象的创建与使用

这一章还是对一些基础知识的普及,但是确实有很多是原来不知道的。

第二章 对象的创建及使用

1 语言的翻译过程

⑴解释器:解释器将源代码转化成一些动作(它可由多组机器指令构成)并执行这些动作

    a(优点):从写代码到执行代码的转化几乎能立即完成,并且源代码总是现存的,所以一出错误解释器很容易支出

    b(缺点):对于大型项目解释器语言有些局限性,解释器必须驻留内存以执行程序,给程序带来额外的开销

⑵编译器:编译器直接把源代码转化成汇编语言或机器指令,最终的结果是一个或多个机器代码文件。

    编译过程:a:预处理器进行预处理操作b:第一遍编译,将源代码分解成晓得单元并把它们按树形结构组织起来,例“A+B”中的‘A’、’+‘和’B’就是语法分析树的叶子节点

                        c:第二遍编译:由代码生成器遍历语法分析树,把树的每个节点转化成汇编语言或机器代码。如果代码生成的是汇编语言,那么还必须用汇编器对其汇编。

    连接器:把一组模块连接成一个可执行程序,操作系统可以装载并执行它。

⑶静态类型检查:在编译的第一遍完成。这是C++的主要特性。

2 函数的声明和定义:ODR(one-definition rule);

⑴ 变量声明:extern int a;//表示变量在文件以外定义,或在文件后面才定义。

⑵函数声明:extern int fun();//由于和普通声明没有区别,所以可以不用使用extern。

3 连接:

⑴连接器如何找到库文件:当C或C++要对函数和变量进行外部医用时,根据引用的情况,连接器会选择两种处理方法中的一种。

a:如果还未遇到这个函数或变量的定义,连接器会把他的表示法加到“未解析的引用列表中”;b:如果连接器遇到过函数或变量定义,那么这就是已解决的引用。 

如果连接器在目标模块列表中没有找到函数或变量的定义,它将去查找库。库有某种索引方式,连接器不必到库里查找所有目标模块---只需要浏览索引。(仅仅是目标模块加入连接,而不是整个库)

⑵秘密附加模块:在创建一个C/C++可执行程序时连接器会秘密连接某些模块,其中之一是启动模块,它包含了对程序的初始化例程,初始化例程是开始执行C/C++程序时必须首先执行的一段程序,初始化例程建立对战,并初始化程序中的某些变量。连接器总是从标准库中调用的经过编译的“标准”函数,由于标准库总是可以被找到,所以只需在程序中包含所需文件,就可以使用库中的任何模块。如果使用附加库,必须把库文件名添加到有连接器处理的列表文件中。

⑶尽可能的使用C++标准库:为了能够更好的移植我们的程序,尽量的使用C/C++标准库,万不得已也要使用符合POSIX标准的函数。

4 几个简单的小程序:

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
    cout << "call shell cmd:ifconfig" << endl;
    system("server");
    return 0;
}

#include <iostream>
#include <string>
using namespace std;

int main()
{
    cout<<"copy file1.txt to file2.cpp"<<endl;
    ifstream in("file1.txt");
    ofstream out("file2.cpp");
    string str;
    while(getline(in,str))
    {
        out<<str<<"\n";
    }
    return 0;
}



#include <vector>
#include <string>
#include <fstream>
#include <iostream>
using namespace std;

int main()
{
    cout<<"put the word in a vector"<<endl;
    ifstream in("file1.txt");
    string str;
    vector<string> words;
    while(in>>str)
    {
        words.push_back(str);
    }
    for(int i=0;i<words.size();i++)
    {
        cout<<words[i]<<"\n";
    }
}

5根据这章学的编写了一个简单的文件管理器:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <cstdlib>
using namespace std;

int main()
{
	system("cls");
	cout<<"**************************************************************"<<endl;
	cout<<"**************************************************************"<<endl;
	cout<<"*************************FileConsole**************************"<<endl;
	cout<<"**************************************************************"<<endl;
	cout<<"**************************************************************"<<endl;
	string strCmd;
	cout<<"please input command:";
	while(cin>>strCmd)
	{	
		if(!strCmd.compare("copy"))
		{
			int words=0;
			string strSrc;
			cout<<"please input the name of source file:";
			cin>>strSrc;
			ifstream in(strSrc.c_str());
			string strDes;
			cout<<"please input the name of destination file:";
			cin>>strDes;
			ofstream out(strDes.c_str());
			string strWord;
			while(in>>strWord)
			{
				out<<strWord<<endl;
				words++;
			}
			cout<<"copy finished"<<endl;
			cout<<words<<"words have copied"<<endl;
		}
		else if(!strCmd.compare("quit"))
		{
			return true;
		}
		else
		{
			cout<<"command is invalid"<<endl;
		}
		cout<<"please input command:";
	}
	return true;
}

之后再补充哈!

Thinking in C++读书笔记(二)---对象的创建与使用,布布扣,bubuko.com

Thinking in C++读书笔记(二)---对象的创建与使用

上一篇:php saas 架构设计,SaaS的几种架构解析


下一篇:三种工厂模式的C++实现