21天学C++(一)概念

完整目录、平台简介、安装环境及版本:参考《21天学C++ 概览》

一、概述

1.1 面向过程和面向对象

1.1.1 面向过程

面向过程是一种思维方式。关注点在于问题解决的流程,重在过程的控制,需要用大量的模块(模块化的思想源自于硬件,在C语言中是函数)将大问题拆解,通过控制模块的执行顺序(顺序、分支和循环)来解决问题。

1、举例:“如何将大象装入冰箱?”,问题细分为三个模块:
a、打开冰箱门 
b、将大象装入冰箱 
c、关闭冰箱门 
2、通过控制代码,控制模块执行,执行顺序为a->b->c,问题解决。

简单的问题用面向过程的思路解决,更加直接有效,但是当问题的规模稍大时,如描述汽车,用面向过程的思想是远远不够的。而且面向过程程序的代码复用性、可扩展性、可移植性、灵活性、健壮性都会在处理大规模问题中出现问题。

1.1.2 面向对象

面向对象最基本的要素就是抽象,抽象应该牢记对象有一个边界,不应该打破边界去窥探对象内部。形象一点来说,对象看上去就像是一个鸡蛋,蛋壳就是鸡蛋的边界。在分析对象的过程中。对鸡蛋的所有关系都是通过蛋壳发生。如果我们试图了解对象内部的细节,就像打破蛋壳去窥探鸡蛋内部,内部一团黏黏糊糊,无从下手。

封装:对于接口使用者,封装可以封装复杂性,使用者不必知道实现细节即可使用;对于程序员,通过封装可以防止代码和数据被外部所定义的其他代码任意访问,增强了代码的健壮性;并且不必修改公有接口的代码即可实现程序的移植。
继承:经过仔细设计的类层次结构是代码重用与扩展的基础。
多态:能使程序员开发出简洁,易懂,易修改,更灵活的代码。

比如汽车:
封装:如汽车的刹车不见,隐藏了许多复杂性,其外观如此简单,用脚就能操作它。而且和发动机,手刹,轮胎大小互不影响。
继承:不同品牌的汽车都有方向盘,手刹,换档器。
多态:刹车系统有正锁反锁之分,只用脚踩刹车停车,同样的接口可以用来控制若干种不同的实现。

1.1.3 关系

面向过程和面向对象都是人们认识和了解这个世界的手段和方法,并无优劣之分,只有是否适用之差别。

1.2 开发C++程序步骤

1.2.1 利用Microsoft Visual Studio 2008创建项目

  • 启动编译器,依次选择菜单 文件-》新建-》项目;
  • 从项目类型中选择 Visual C++,从模板中选择Win32控制台应用程序;
  • 输入项目名,选择项目文件存放位置,其余默认,点击“确定”;
  • 选择应用程序设置,其中应用程序类型选择“控制台应用程序”,附加选项选择“空项目”,其余默认,点击完成;

1.2.2 在项目中添加文件

  • 右键点击“源文件”,选择 添加-》新建项;
  • 在模板中选择“C++文件(.cpp)”,并输入文件名称,点击“添加”;
  • 在新建的文件中输入如下内容:
#include <iostream>
int main()
{
	std::cout<<"Hello World!"<<std::endl;
	return 0;
}

执行结果如下:

Hello World!
请按任意键继续. . .

1.2.3 iostream.h和iostream区别

iostream把标准C++库的组件放在一个名位std的namespace里面。

iostream.h则将这些标准组件放在全局空间里,同时在标准化以后旧有的C标准库也已经经过改造了。

使用前者,就需要在代码中添加语句:using namespace std;

1.3 编写、编译、链接、运行C++程序

1.3.1 编译

预编译:基本上是对源程序的“替代”工作。生成一个没有宏定义、没有条件编译指令、没有特殊符号的输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但内容有所不同,经过预编译后产生完整的源文件,将此文件作为编译程序的输入而被翻译成为机器指令。如“#include”、“#define”和条件预编译指令,如“#if”、“#ifdef”等的替换。

编译:编译过程就是把预处理完的文件进行一系列的词法分析、语法分析、语义分析以及优化后产生相应的汇编代码文件。编译是以源程序文件为单位单别编译的,头文件不参加编译。

汇编:把汇编语言代码翻译成目标机器指令的过程。根据汇编指令和机器指令的对照表一一翻译,生成目标文件,如Windows是下是.obj目标文件,Linux下是.o目标文件。目标文件中所存放的也就是与源程序等效的目标机器语言代码。

1.3.2 链接

将有关的目标文件彼此相连接,同时还要同系统提供的资源(如静态链接lib、动态链接dll等)连接成为一个整体,如果不出现错误,会得到一个后缀为 .exe的可执行文件。

1.3.3 运行

执行可执行的二进制文件(.exe文件)即可得到运行结果。

发表回复