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堆栈类类型。这些工作都是在编译过程中实现的,即编译时多态。

《C++ 101条建议》学习笔记——第一章快速入门的更多相关文章

  1. Java学习笔记 第一章 入门<转>

    第一章 JAVA入门 一.基础常识 1.软件开发 什么是软件? 软件:一系列按照特定顺序组织的计算机数据和指令的集合 系统软件:DOS,Windows,Linux 应用软件:扫雷.QQ.迅雷 什么是开 ...

  2. C语言学习笔记第一章——开篇

    本文章B站有对应视频 (本文图片.部分文字引用c primer plus) 什么是C语言 顾名思义,c语言是一门语言,但是和我们所讲的话不同,它是一门编程语言,是为了让机器可以听懂人的意思所以编写的一 ...

  3. 《跟我学Shiro》学习笔记 第一章:Shiro简介

    前言 现在在学习Shiro,参照着张开涛老师的博客进行学习,然后自己写博客记录一下学习中的知识点,一来可以加深理解,二来以后遗忘了可以查阅.没有学习过Shiro的小伙伴,也可以和我一起学习,大家共同进 ...

  4. JavaScript高级程序设计学习笔记第一章

    作为学习javascript的小白,为了督促自己读书,写下自己在读书时的提炼的关键点. 第一章: 1.JavaScript简史:Netscape Navigator中的JavaScript与Inter ...

  5. c#高级编程第七版 学习笔记 第一章 .NET体系结构

    第一章      .NET体系结构 本章内容: 编译和运行面向.NET的代码 Microsoft中间语言(Microsoft Intermediate Language,MSIL或简称IL)的优点 值 ...

  6. [HeadFirst-JSPServlet学习笔记][第一章:前言与概述]

    第一章 前言与概述 web服务器做什么? 答:接收客户请求,然后向客户返回结果 web客户做什么? 答:此处客户指浏览器,web客户允许用户请求服务器上的某个资源,并向用户展现请求的结果. html ...

  7. GIT学习笔记——第一章

    git之vim编辑器退出命令 # 学习笔记 张文军微博主页  张文军码云主页   张文军新浪云主页  张文军博客主页 ## 刚学习git,好多东西没接触过,进入vim后不知道如何出来了,网上找了很多都 ...

  8. Java 学习笔记 第一章:Java语言开发环境搭建

    第一章:Java语言开发环境搭建 第二章:常量.变量和数据类型 第三章:数据类型转换.运算符和方法入门 1.Java虚拟机——JVM JVM(Java Virtual Machine ):Java虚拟 ...

  9. 《Python基础教程(第二版)》学习笔记 -> 第一章 基础知识

    写笔记的原因:书也看了一遍,视频也看了,但总是感觉效果不好,一段时间忘记了,再看又觉得有心无力,都是PDF的书籍,打开了就没有心情了,上班一天了,回家看这些东西,真的没多大精力了,所以,我觉得还是把p ...

随机推荐

  1. AR(增强现实) 知识篇

    增强现实(Augmented Reality,简称AR),是一种实时地计算摄影机影像的位置及角度并加上相应图像的技术,这种技术的目标是在屏幕上把虚拟世界套在现实世界并进行互动.这种技术估计由1990年 ...

  2. Centos7的firewalld配置

    红帽官方的使用文档: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Security_Gu ...

  3. iOS面试

    1.进程.线程的区别?2.“三次握手”是什么?具体细节,连接释放时需要几次“握手”,说出大概过程.3.TCP.UDP协议的区别?计算机网络分几层,以及TCP.Http协议各自工作在哪一层及相关细节.4 ...

  4. 2016-1-1最新版本的linphone-android在mac上编译通过,同时建立了IDEA工程

    虽然参考了这个文章<MAC OS编译Android版Linphone SDK和APP>,https://www.lidaren.com/archives/1592 ,但是在实际的编译过程中 ...

  5. knockoutJS学习笔记06:ko数组与模板绑定

    前面已经介绍了基本的绑定和模板相关知识,接下来就看ko里的数组和模板绑定,数组和模板绑定应该是实际项目中用得比较多的,ko提供了很好的支持. 一.observaleArray 前面的监控属性都是单个对 ...

  6. 【Alpha】十天屠龙记

    团队名字: 一不小心就火了 屠龙天团少年们: 031402504 陈逸超 (组长) 031402505 陈少铭 031402511 黄家俊 031402515 翁祖航 031402516 黄瑞钰 03 ...

  7. 推公式 HDU 2552

    T 给你2个值 求另外一个 需要推一下 tan(a+b)=(tan(a)+tan(b))/(1-tan(a)*tan(b)); 等式左右取tan tan(atan(a))=a 1/s=tan(...) ...

  8. PE启动菜单修改工具 MsgDiyer(GfxMenu Message制作工具) V2.0.3官方版

    MsgDiyer基本功能  1.新建message文件.修改现有message文件:2.自定义背景图片:3.制作message字体,包括行高.大小等(目前不兼容WIN7):4.自定义字库:5.导入外置 ...

  9. linux下重启apache

    基本的操作方法: 本文假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令: 推荐/usr/local/apache2/bin/apachec ...

  10. NFS网络文件共享

    NFS(Network File System) NFS在企业中的应用场景 企业集群架构中,NFS网络文件系统一般用来存储共享的视频.图片.附件等静态资源,一般把网站用户上传的文件都放到NFS共享里, ...