C++中面向对象的理解
1、对于OO(面向对象)的含义,并非每一个人的看法都是同样的。
即使在如今。假设问十个人,可能会得到15种不同的答案。差点儿全部的人都会允许继承和多态是OO中的概念。大多数人还会再加上封装。
另一些人会加上异常处理。而可能会没有人将模板也包括进去。问题的关键在于:对于某个特性是否是属于OO的,往往都存在着不同的观点。而每一种观点都有着热情的拥护者。
2、C++的标准化工作对C++最重要的贡献就是:对功能强大的抽象机制提供了更有力的支持,从而减少了软件的复杂性。C++并不只不过一种面向对象的语言。它可以支持好几种编程风格,包含面向对象编程风格和泛型编程风格。这些编程风格都是非常重要的,由于每一种编程风格都提供了非常灵活的方法来通过抽象机制对代码进行组织。
面向对象编程使我们可以把对象的状态以及处理这些状态的函数绑定在一起,而封装和继承则使我们可以管理相互依赖性,并使可以通过更清晰和更easy的方式来重用代码。泛型编程则是一种较新的风格,它可以使我们编写出一些函数和类。它们可以对其它一些“没有定义的、没有关联的和未知类型”的函数和对象进行操作,从而为减少程序中耦合性和相互依赖性提供了一种独特的方式。当前,在其它的一些语言中也提供了对泛型的支持。可是都没有像C++中对泛型的支持这样强。其实。如今的泛型编程可能都要归功于C++独特的模板形式。今天。在C++中提供了很多功能强大的方式来表达抽象机制,而由此带来的灵活性就是C++标准化中最重要的成果。
3、在C++中没有模块系统(不管是完整的还是不完整的);它缺乏其它一些重要的特性,比如内存垃圾收集机制,它有静态类型检查,但却并不一定是“强”类型检查。
1、强/弱类型是指类型检查的严格程度的。语言有无类型,弱类型和强类型三种。无类型的不检查。甚至不区分指令和数据。
弱类型的检查非常弱,仅能严格的区分指令和数据。强类型的则严格的在编译期进行检查。
强类型定义语言:强制数据类型定义的语言。
也就是说。一旦一个变量被指定了某个数据类型,假设不经过强制转换。那么它就永远是这个数据类型了。举个样例:假设你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。强类型定义语言是类型安全的语言。
弱类型定义语言:数据类型能够被忽略的语言。它与强类型定义语言相反, 一个变量能够赋不同数据类型的值。
2、动态类型语言:动态类型语言是指在执行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时。永远也不用给不论什么变量指定数据类型,该语言会在你第一次赋值给变量时。在内部将数据类型记录下来。
静态类型语言:静态类型语言与动态类型语言刚好相反。它的数据类型是在编译其间检查的,也就是说在敲代码时要声明全部变量的数据类型。C/C++是静态类型语言的典型代表,其它的静态类型语言还有C#、JAVA等。
强类型定义语言在速度上可能略逊色于弱类型定义语言,可是强类型定义语言带来的严谨性可以有效的避免很多错误。
另外,“这门语言是不是动态语言”与“这门语言是否类型安全”之间是全然没有联系的!
3、封装
封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。
在面向对象的编程语言中,对象是封装的最基本单位,面向对象的封装比传统语言的封装更为清晰、更为有力。
面向对象的封装就是把描写叙述一个对象的属性和行为的代码封装在一个“模块”中。也就是一个类中,属性用变量定义,行为用方法进行定义,方法能够直接訪问同一个对象中的属性。
第一、良好的封装可以降低耦合。
第二、类内部的实现能够自由地改动。
第三、类具有清晰的对外接口。
封装的优点非常好理解,我们的房子就是一个类的实例。室内的装饰与摆设仅仅能被室内的居住者赞赏和使用,假设没有四面墙的遮挡,室内的全部活动在外人面前一览无遗。因为有了封装。房屋内的全部摆设都能够任意地改变而不用影响他人。然而。假设没有门窗。一个包裹得严严实实的黑箱子。即使它的空间再宽阔,也没有有用价值。房屋的门窗,就是封装对象暴露在外的属性和方法,专门供人进出,以及流通空气、带来阳光。
4、继承
在定义和实现一个类的时候。能够在一个已经存在的类的基础之上来进行。把这个已经存在的类所定义的内容作为自己的内容,并能够增加若干新的内容,或改动原来的方法使之更适合特殊的须要,这就是继承。继承是子类自己主动共享父类数据和方法的机制,这是类之间的一种is--a关系。提高了软件的可重用性和可扩展性。
第一、子类拥有父类非private的属性和功能。
第二、子类具有自己的属性和功能,即子类能够扩展父类没有的属性和功能;
第三、子类还能够以自己的方式实现父类的功能(方法重写)。
对于构造函数。它不能被继承,仅仅能被调用。继承会破坏封装。父类实现细节暴露给子类。
这事实上是增大了两个类之间的耦合性。而且是强耦合的关系。
5、多态
同一操作作用于不同的类的实例。将产生不同的运行结果。即不同类的对象收到相同的消息时。得到不同的结果。多态是面向对象程序设计的重要特征之中的一个,是扩展性在“继承”之后的又一重大表现 。对象依据所接受的消息而做出动作,相同的消息被不同的对象接受时可能导致全然不同的行为,这样的现象称为多态性。
虚方法是依照其执行时类型而非编译时类型进行动态绑定调用的。
6、抽象
抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类仅仅考虑这些事物的相似和共性之处,而且会忽略与当前主题和目标无关的那些方面。将注意力集中在与当前目标有关的方面。
第一、抽象类不能实例化;
第二、抽象方法是必须被子类重写的方法;
第三、假设类中包括抽象方法,那么类就必须定义为抽象类,不论是否还能够包括其它一般方法。
7、接口
接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦类实现了接口。类就能够支持接口所指定的全部属性和成员。
声明接口在语法上与声明抽象类全然同样,但不同意提供接口中不论什么成员的运行方式。所以接口不能实例化。不能有构造方法和字段。不能有修饰符;不能声明为虚拟的或静态的等。还有实现接口的类就必需要实现接口中的全部方法和属性。
一个类能够支持多个接口,多个类也能够支持同样的接口。
抽象类能够给出一些成员的实现,接口却不包括成员的实现,抽象类的抽象成员可被子类部分实现,接口的成员须要实现类全然实现,一个类仅仅能继承一个抽象类,但可实现多个接口等等。
C++中面向对象的理解的更多相关文章
- Java中面向对象的理解
按照惯例,先做一个简单的介绍,现在开始学习 Thinging in Java 4 ,一边看,一边记录,我都不想给自己设定时间安排了,毕竟很少实现过.所以就这样吧!不定期的更新,我都会放到博客中的. 所 ...
- 对面向对象的理解—— SAP电面(1)
对于C++面向对象的理解 面向对象是在结构化设计方法出现很多问题的情况下应运而生的.结构化设计方法求解问题的基本策略是从功能的角度审视问题域.它将应用程序看成实现某些特定任务的功能模块,其中子过程是实 ...
- JavaScript面向对象的理解
JavaScript面向对象的理解 笔记链接: http://pan.baidu.com/s/1c0hivuS 1:JavaScript 中分两种对象,函数对象和普通对象new Function() ...
- Java中面向对象三大特征
也就是说在这里"人"是多态的, 在不同的形态时,特征行为是不一样的, 这里的"人", 同时有两种形态,一种是教师形态,一种是学生形态,所对应的特征行为分别是&q ...
- 谈个人对avascript面向对象的理解
javascript,不但是javascript或者是别的语音,大多数都有一句经典的话:一切皆对象. 下面谈谈我个人对面向对象的理解,为什么要用面向对象来写js,这话我思考了很久,最后得出的结论就是: ...
- javascript javascript面向对象的理解及简单的示例
javascript面向对象的理解及简单的示例 零.本节重点: 1.封装: 2.继承: 壹.下面理解: 一. javascript面向对象概念: 为了说明 JavaScript 是一门彻底的面向对象的 ...
- Java中hashcode的理解
Java中hashcode的理解 原文链接http://blog.csdn.net/chinayuan/article/details/3345559 怎样理解hashCode的作用: 以 java. ...
- JavaScript中面向对象的三大特性(一个菜鸟的不正经日常)
经过几天的学习,把jQuery给啃会了,但是运用的还不算特别熟练,总感觉自己在JavaScript方面的基础十分欠缺,所以继续拾起JavaScript,开始更好的编程之旅~ 今天学的是JavaScri ...
- java基础-谈谈你对面向对象的理解
一 前言 本篇文章的核心知识如下,主要是帮助大家更好的理解面向对象编程: 二面向对象VS面向过程 2.1 面向过程编程 面向过程编程(Process Oriented Programming )其意指 ...
随机推荐
- 如何开启Linux双网卡的转发功能
原文地址:http://blog.csdn.net/lllzd/article/details/8587624 说明:在<把arm开发板做成USB网卡(RNDIS /Ethernet Gadge ...
- nginx -- 启动, 重启, 关闭
Nginx的启动.停止与重启 重启: nginx -s reload 启动 启动代码格式:nginx安装目录地址 -c nginx配置文件地址 例如: [root@LinuxServer sbin] ...
- numpy自动生成数组
1 np.arange(),类似于range,通过指定开始值,终值和步长来创建表示等差数列的一维数组,注意该函数和range一样结果不包含终值. >>> np.arange(10) ...
- 在linux下玩转usb摄像头
硬件平台:PC机一台 .usb摄像头 操作系统:Linux3.0.8 交叉编译环境:arm-none-Linux-gnueabi-gcc 4.5.1 调试步骤: 一.linux 内核解压 1.1使用 ...
- How to support both ipv4 and ipv6 address for JAVA code.
IPv6 have colon character, for example FF:00::EEIf concatenate URL String, IPv6 URL will like: http: ...
- hdu 5284 wyh2000 and a string problem(没有算法,仅仅考思维,字符数组得开20万,不然太小了)
代码: #include<cstdio> #include<cstring> using namespace std; char s[200000]; int main() { ...
- Windows虚拟内存如何设置
当我们在运行一些大型的软件,或者是刚刚退出游戏的时候经常会提示"你的虚拟内存过低"的提示,出现这种情况一般是:一:你的物理内存比较小,运行大的软件比较吃力:二:你运行了许多窗口或者 ...
- 一扫天下——ZXing使用全解析
一扫天下--ZXing使用全解析 二维码如今已经烂App了,无论什么App.没有二维码就好像低人一等了. 所以,在自己的项目中集成二维码功能还是非常有必要的. 网上非常多都是基于ZXing2.3的.可 ...
- C语言 | 基础知识点笔记
函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...
- Oracle 字符串不为空条件
Oracle 中,空字符串存入到Oracle中会自动转换为NULL,另外VARCHAR2把空串等同于null处理. SQL from dual where null=null; 没有查到记录 SQL ...