时间:2022-10-09 18:00:30 | 浏览:348
C++语言称为C with Classes,C++比C到底加了什么呢?C++对C语言(面向过程)的扩充主要表现在面向对象和泛型编程两部分。另外,C++对C语言的基础方面如函数、变量类型等也进行了完善和添加。
泛型编程最初诞生于C++中,由Alexander Stepanov和David Musser创立。目的是为了实现C++的STL(标准模板库)。其语言支持机制就是模板(Templates)。模板的精神其实很简单:参数化类型。换句话说,把一个原本特定于某个类型的算法或类当中的类型信息抽掉,抽出来做成模板参数T。
面向过程的程序设计思路:分析解决问题所需步骤,用函数把这些步骤依次实现。采用函数(过程)来描述对数据的操作(但函数与其操作的数据是分离的。面向过程是在面向对象产生之前及之后,甚至日至今日还应用于程序开发中的程序设计思想。
面向对象的程序设计思路:把构成问题的事务分解为各个对象,将数据(数据结构)和对数据的操作(方法或函数)抽象、封装到类,类实例化为对象。建立对象目的,不是完成一个步骤,而是描述某个事务在解决整个问题步骤中的行为。面向对象技术是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术。它具有抽象性、封装性、继承性及多态性等。
C语言是面向过程的编程,它最重要的特点是函数(如下面的计算圆面积的函数),通过主main函数来调用各个子函数。程序运动的顺序都是程序员事先决定好的。
double Circle(double m_dRadius;)
{
return(3.14*m_Radius * m_dRadius);
}
C++是面向对象的编程,类是它的主要特点,在程序执行过程中,先由主main函数进入,定义一些类,根据需要执行类的成员函数,过程的概念被淡化了(实际上过程还是有的,就是主函数的那些语句),以类驱动程序运行,类就是对象,所以我们称之为面向对象程序设计。
形象地理解,面向过程就是把所有的功能全部在一个大的类里定义出来,当系统庞大时,功能多了,各种操作之间的调用关系也很复杂,当需要修改一个功能时就可能引发一连串的改动,使修改和维护成本很昂贵。面向对象是把功能以对象为基本单位进行分类,这就是面向对象程序设计所常说的类。当需要添加功能时,只需修改相应的类和极小的其他部分,即可达到目的。
面向对象在分析和解决问题的时候,将涉及的数据和数据的操作封装在类中,通过类可以创建对象。例如,可以构建一个Circle类(表示圆的类),它是半径不同的所有圆的一个抽象描述。通过类可以创建任意多个对象,这些对象之间是相互独立的。可以由Circle创建圆c1和圆c2,而c1和c2是彼此独立的对象。这样,对于事务的管控力度,就由某个具体的对象扩大到一个类,符合人们认识事务的习惯。
class Circle
{
private:
double m_dRadius;
public:
void SetR(double r)
{
m_dRadius = r;
}
double GetArea()
{
return(3.14*m_Radius * m_dRadius);
}
}
面向过程程序设计的实质是从计算机处理问题的观点(信息流及转换)来进行程序设计工作:输入-运算-输出。需要一开始就设计全面的、自上而下的整个应用程序的架构,因此要求程序设计者对问题域有全面的了解。
面向对象程序设计是一种自下而上的结构化的程序设计方法,往往从问题的一部分着手,一点一点地构建整个程序。面向对象设计以数据为中心,类作为表现数据的工具,成为划分程序的基本单位。
面向过程 | 面向对象 | |
优点 | 性能较高,一般单片机、嵌入式开发、Linux等采用; | 易维护、易复用和扩展;由于面向对象有封装、继承、多态的特性,可以设计出低耦合的系统,使系统更加灵活,更易于维护;可以利用框架产品,如MFC。 |
缺点 | 不易维护、不易复用和扩展; | 性能较低,因为类调用时要实例化,开销比较大,比较消耗资源; |
数据和对数据的操作 | 数据和对数据的操作(函数)是分离的; | 将数据和对数据的操作通过类和对象作为一个整体处理; |
考虑的中心 | 以功能为中心 | 以数据为中心,相对以功能为中心,具有较强的稳定性; |
控制流程 | 由程序中预定的顺序来决定 | 由运行时各种事件的实际发生来触发,更符合实际需要; |
面向对象由面向孕育而来,两者各有特色,均有自己的优缺点和使用范围。
客观世界由对象组成;
对象抽象为类;
类与类之间存在继承关系;
对象之间通过消息传递而彼此联系;
面向对象程序设计的定义:“面向对象程序设计是一种方法,这种方法为数据和函数提供共同的独立内在空间,这些数据和函数可以作为模板以便在需要时创建类似模块的拷贝。”从该定义可以看出,一个对象被认为是计算机内存中的一个独立区间,在这个区间中保存着数据和能够访问数据的一组操作。因为内存区间是相互独立的,所以对象可以不经修改就应用于多个不同的程序中。
程序设计的重点在于数据而不是过程;程序被划分为所谓的对象。
数据结构为表现对象的特性而设计;函数作为对某个对象数据的操作,与数据结构紧密地结合在一起。
数据被隐藏起来,不能为外部函数访问;对象之间可以通过函数沟通;
新的数据和函数可以在需要的时候轻而易举地添加进来。
在程序设计过程中遵循由下而上的设计方法;
面向对象程序有易维护的优点
通过继承,可以大幅减少冗余的代码,并扩展现有代码的用途;
可以在标准模板上(“标准”指程序员之间彼此的协议)构建自己的程序。而不必从头开始,从而减少软件开发时间并提高生产效率。
数据隐藏的特性能帮助程序员们保护程序免受外部代码的侵袭。
允许一个对象的多个实例同时存在,而且彼此之间不会相互干扰。
基于对象的工程,可以很容易地分割为独立的部分;以数据为中心的设计方法,允许用户抓住可实现模型的更多细节。
面向对象的系统很容易从小到大逐步升级。
对象间通信所使用的消息传递技术与外部系统接口部分的描述更简单,更便于控制软件的复杂度。
实时系统;
仿真和建模;
面对对象数据库;
超文本、超媒体和扩展文本;
AI和专家系统;
神经网络和并行程序设计;
决策支持和办公自动化系统;
CIM/CAM/CAD系统.
-End-
C++语言是非常独特的。虽然实际上所有的编程语言都从其他语言中吸收了一些思路、语法元素和关键字C++却是吸收了另一种完整的语言,即C语言。事实上, C++语言的创建者Bjarne Stroustrup原先把他的新语言命名为"带类的C"。这意
第1章初识C++为什么选择C++?从读者自身的实际情况来看,原因有很多。读者选择C++可能是因为必须为一个C++项目提供技术支持。在超过30年的生命周期中,该项目中已经包含了数百万行C++代码,并且大部分流行的应用程序和操作系统是使用C+编
写在前面的话在大多数开发或者准开发人员的认识中,C/C++ 是一门非常难的编程语言,很多人知道它的强大,但因为认为“难”造成的恐惧让很多人放弃。笔者从学生时代开始接触 C/C++,工作以后先后担任过 C++客户端和服务器的开发经理并带队开发
作者 | Herb Sutter译者 | 弯月,责编 | 屠敏出品 | CSDN(ID:CSDNnews)C++20已全票通过,有望于今年晚些时候发布9月4日,C++ 20的国际标准草案投票结束,而且获得了全票通过。这意味着C++ 20已完
SocketLinux Socket 编程(不限 Linux)Socket 中的 read()、write() 函数ssize_tread(intfd,void*buf,size_tcount);ssize_twrite(intfd,con
TCP 传输连接管理因为 TCP 三次握手建立连接、四次挥手释放连接很重要,所以附上《计算机网络(第 7 版)-谢希仁》书中对此章的详细描述:https://gitee.com/huihut/interview/raw/master/ima
众所周知,C++难。就好像博大精深的汉语比英语难,这是客观事实,我们并不否认。但,转念想想,英语也不简单吧?从小学开始学,到了大学,挂在四六级上的同学数不胜数。可貌似没有人说不好汉语吧,此时,你能说汉语比英语简单么?不过是环境使然罢了。
宏定义是用一个标识符来表示一个字符串,在宏调用中将用该字符串代替宏名。给程序员提供了便利,使程序更加清晰,便于阅读和理解,进一步提高了程序的运行效率,对于嵌入式系统而言,为了能达到性能要求,宏是一种很好的代替函数的方法,但是使用不慎会得到
出品|开源中国文|局长科技外媒 ITWire 报道了对 Linus Torvalds 的采访。关于 Linux 内核对 Rust 的支持情况,Linus 回应称“Linux 内核尚未支持 Rust”,并补充说“目前相关工作正处于开发阶段,预
C 和 C++ 的没落,不仅是因为 CPU 时钟周期的关系,而且因为关系到了开发者的时间全球大约有400万C和C++程序员,很可能是最大的社区了,约占20%的市场份额,不亚于Java,甚至还要更多一些(C和C++一起)。它们也是当前主流语言