《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堆栈类类型。这些工作都是在编译过程中实现的,即编译时多态。
《C++ 101条建议》学习笔记——第一章快速入门的更多相关文章
- Java学习笔记 第一章 入门<转>
第一章 JAVA入门 一.基础常识 1.软件开发 什么是软件? 软件:一系列按照特定顺序组织的计算机数据和指令的集合 系统软件:DOS,Windows,Linux 应用软件:扫雷.QQ.迅雷 什么是开 ...
- C语言学习笔记第一章——开篇
本文章B站有对应视频 (本文图片.部分文字引用c primer plus) 什么是C语言 顾名思义,c语言是一门语言,但是和我们所讲的话不同,它是一门编程语言,是为了让机器可以听懂人的意思所以编写的一 ...
- 《跟我学Shiro》学习笔记 第一章:Shiro简介
前言 现在在学习Shiro,参照着张开涛老师的博客进行学习,然后自己写博客记录一下学习中的知识点,一来可以加深理解,二来以后遗忘了可以查阅.没有学习过Shiro的小伙伴,也可以和我一起学习,大家共同进 ...
- JavaScript高级程序设计学习笔记第一章
作为学习javascript的小白,为了督促自己读书,写下自己在读书时的提炼的关键点. 第一章: 1.JavaScript简史:Netscape Navigator中的JavaScript与Inter ...
- c#高级编程第七版 学习笔记 第一章 .NET体系结构
第一章 .NET体系结构 本章内容: 编译和运行面向.NET的代码 Microsoft中间语言(Microsoft Intermediate Language,MSIL或简称IL)的优点 值 ...
- [HeadFirst-JSPServlet学习笔记][第一章:前言与概述]
第一章 前言与概述 web服务器做什么? 答:接收客户请求,然后向客户返回结果 web客户做什么? 答:此处客户指浏览器,web客户允许用户请求服务器上的某个资源,并向用户展现请求的结果. html ...
- GIT学习笔记——第一章
git之vim编辑器退出命令 # 学习笔记 张文军微博主页 张文军码云主页 张文军新浪云主页 张文军博客主页 ## 刚学习git,好多东西没接触过,进入vim后不知道如何出来了,网上找了很多都 ...
- Java 学习笔记 第一章:Java语言开发环境搭建
第一章:Java语言开发环境搭建 第二章:常量.变量和数据类型 第三章:数据类型转换.运算符和方法入门 1.Java虚拟机——JVM JVM(Java Virtual Machine ):Java虚拟 ...
- 《Python基础教程(第二版)》学习笔记 -> 第一章 基础知识
写笔记的原因:书也看了一遍,视频也看了,但总是感觉效果不好,一段时间忘记了,再看又觉得有心无力,都是PDF的书籍,打开了就没有心情了,上班一天了,回家看这些东西,真的没多大精力了,所以,我觉得还是把p ...
随机推荐
- WebForm路由踩坑 ajax请求多次
WebForm路由踩坑 再次接触Asp.Net WebForm已是4年后的今天,源起新入职的公司,一个老的项目. Web接触的少,那就多动手写写. WebForm1.aspx <body> ...
- 【跟着子迟品 underscore】如何优雅地写一个『在数组中寻找指定元素』的方法
Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...
- [ASP.NET 5]终于解决:Unable to load DLL 'api-ms-win-core-localization-obsolete-l1-2-0.dll'
11月12日,惊喜地发现SqlClient(System.Data.SqlClient.dll)跨平台了(对应的nuget包包是runtime.unix.System.Data.SqlClient), ...
- ModernUI教程:独立显示器DPI感知
独立显示器DPI感知,是在Windows 8.1中新增的特性,这个特性针对拥有多个显示器同时各个显示器的DPI设定又不同的人.对这个新特性做了优化支持的软件能够在一个高DPI的显示器 ...
- python基础-模块
一.模块介绍 ...
- 响应式疑惑? CSS单位研究
各种单位要搞清楚,自己试一试,实践出真知! 2.屏幕分辨率 响应式 哦,电脑的分辨率:1440x900表示水平有1440个像素点哦! 垂直有900个像素点. 而网页在浏览器中,所以宽度是电脑的分 ...
- 【OpenJudge 191】【POJ 1189】钉子和小球
http://noi.openjudge.cn/ch0405/191/ http://poj.org/problem?id=1189 一开始忘了\(2^{50}\)没超long long差点写高精度Q ...
- ORB-SLAM(一)简介
ORB-SLAM是一种基于ORB特征的三维定位与地图构建算法(SLAM)[1].该算法由Raul Mur-Artal,J. M. M. Montiel和Juan D. Tardos于2015年发表在I ...
- 教你一招:根据身份证号计算出生年月和年龄 text函数和mid函数混用 datedif函数和today函数混用
在电子表格Excel中,使用text函数和mid函数混用,根据身份证号计算出生年月: =text(mid(A2,,),"0!/00!/00") #0!/00!/00 为日期的格式# ...
- Asp.Net通过HttpModule实现URL重写
首先总结一下为什么要对URL进行Rewrite,比如我可以把/Default.aspx?param=3替换成/Home/Default/3(类似mvc). 一.缩短url,隐藏实际路径提高安全性; 二 ...