《C++ 101条建议》学习笔记——第一章快速入门

1.C++程序组成:a.编译指示,由#开始,不由分号结束。只是影响编译过程。b.声明语句,影响编译过程,编译结果中并不会生成对应的指令。只是告诉编译器一些信息。c.可执行过程语句,生成对应的指令。包括:简单语句、复合语句、控制语句、try语句等。d.函数(返回类型,函数名称,参数列表,函数体)。函数名称说明函数的功能,返回值返回函数执行后的输出结果,形式参数表示函数的输入或输出,函数体决定函数的执行过程。

2.

面向过程:分析解决问题所需要的步骤,用函数把这些步骤依次实现。

面向对象:把构成问题的事务分解成各个对象,建立对象目的,不是完成一个步骤,而是描述事务在解决整个问题步骤中的行为。以对象为基础,以事件和消息来驱动对象执行处理的程序设计技术。具有抽象、封装、继承、多态性。

两者是从思考问题的角度上区分的。例如:一辆汽车,面向过程的思想去思考,就是:如何启动汽车,起步,加速,刹车,熄火等一个个操作,而汽车在这里不是我们所关心的。而面向对象则以汽车为对象,一切由汽车开始,以上的可用操作,即功能是汽车这个对象本身所具有的,做任何操作只需要告诉汽车即可。

C是面向过程的,其最重要的特点是函数,通过main来调用各个函数,程序运行顺序都是程序事先决定好的。

C++面向对象,主要特点是类,main进入,定义一些类对象,并执行类方法。过程的概念被淡化了,以对象驱动程序运行。

面向过程一般采用自上而下的设计方法,一开始就设计全面的,自上而下的整个程序的架构,因此要求程序设计者对问题有全买你的了解。

面向对象是一种自下而上的设计方法,从问题的一部分着手,一点一点的构建整个程序。面向对象设计以数据为中心,类作为表现数据的工具,成为划分程序的基本单位。面向对象有以下几个重要特点:

1、客观世界由对象组成;2、对象抽象为类;3、类与类之间存在继承关系;4、对象之间通过消息传递而彼此相连。

面向过程优点和缺点:

优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;所以一般性能要求重要的都采用面向过程开发,比如:单片机、嵌入式、linux等等

缺点:没有面向对象容易维护,复用,扩展。

面向对象优点和缺点:

优点:复用,扩展,维护容易。因为有封装,继承,多态的特性,可以设计出低耦合的系统,使得系统更加灵活,易于维护。

缺点:性能比面向过程低。

当前面向对象最有前途的应用领域 有:

1.实时系统;

2.仿真和建模;

3.面向对象数据库;

4.超文本、超媒体和扩展文本;

5.AI和专家系统;

6.神经网络和并行程序设计;

7.决策支持和办公自动化系统;

8.CIM/CAM/CAD系统;

面向对象程序设计定义:面向对象程序设计是一种方法,这种方法为数据和函数提供共同的独立内存空间,这些数据和函数可以作为模板以便在需要的时候创建类似的拷贝。这样的程序设计方法成为面向对象程序设计。

从定义上看,一个对象被认为是一个独立的内存空间,在这个空间上存储着数据和操作这个数据的一组操作。因为内存区间是独立的,所以对象可以不经过修改就应用于多个不同的程序。

面向对象:注重数据,不注重过程,程序被划分为所谓的对象。

     数据结构为表现对象的 特性而设计

     数据被隐藏起来,不能为外部函数访问

     新的数据和函数在需要的时候可以轻易的添加进来

     遵循自下而上(bottom-up)的设计方法

3.C++使用C语言:

C++和C语言具有不同的编译和链接方式,C语言编译器编译函数不带函数的类型和作用域信息,只包含函数符号名字;而C++编译器为了实现函数的重载,在编译时带上了函数的类型和作用域。

C编译器不会检查参数和返回值,只要找到函数对应的符号就可以连接成功,实现调用。而在强调安全的C++中,编译器会检查参数类型和作用域信息,函数原型会编译成_Z_Func_int_int这样的符号(也正是这种机制为函数重载的实现提供了必要的支持)。在链接过程中,C++链接器会在函数原先所在模块的生成的目标文件中查找_Z_Func_int_int这样的符号。

extern "C"的作用是告诉C++编译器在查找调用链接符号时采用C语言方式,让编译器寻找_Func而不是_Z_Func_int_int

4.C++比C加了什么

主要表现在面向对象和泛型编程两部分。另外,也有对基础方面如函数、变量类型等也进行了完善和添加。

(1)bool变量是C++的内置变量类型,一般占1个字节。C语言在C99标准之前没有bool变量,想要使用的话只有自己定义:typedef enum{false = 0, true = 1}bool;

(2)引用是C++对C的一个新引入的重要扩充,它是被绑定变量或对象的别名。

(3)C++支持函数重载、内联,同时还支持函数的引用调用。

(4)C++是面向对象语言,这是区分与C的最根本的地方——C是面向过程语言。

面向对象编程的关键思想是多态性。在C++中,通过基类的引用或指针调用虚拟函数时,发生动态绑定。这是C++中多态的基础。C++多态包括两种:运行时多态,编译时多态。编译多态是编译阶段根据参数确定与哪个同名函数联系;运行时多态是在程序运行阶段才根据产生的信息确定需要调用那个同名的函数。C++通过函数重载和运算符重载实现编译时多态,通过继承和虚函数来实现多态。面向对象的多态性是运行时多态,后续将要讲述的泛型编程即编译时多态。

泛型编程是C++中的一个概念,泛型编程依赖的多态是上下文中的编程使多态,主要是通过模板机制来构建一类操作类似,但数据不同的程序,其中有函数模板和类模板。

泛型的地一个好处是编译时严格类型检查。这是集合框架最重要的特点。此外,泛型消除了绝大多数的类型转换。

泛型:它把数据类型作为一种参数传递进来。

template <class T> class Stack

{

public:

  …………

  …………

  T Pop(void);

  bool Push(T Elem);

private:

  T m_tData[1000];

  int m_nDataPtr;

}

template<class T> CStack<T>::CStack(void)

{

  …………

  …………

}

template<class T>CStack<T>::Push(T Elem)

{

  …………

  …………

}

由此可以看出CStack<T>模板类传入的不同数据类型,可以生成与此对应的不同类型的CStack堆栈类类型。这些工作都是在编译过程中实现的,即编译时多态。

上一篇:前端程序员:月薪 5K 到 5 万,我干了啥


下一篇:python中的迭代器