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、接口

接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦类实现了接口。类就能够支持接口所指定的全部属性和成员。

声明接口在语法上与声明抽象类全然同样,但不同意提供接口中不论什么成员的运行方式。所以接口不能实例化。不能有构造方法和字段。不能有修饰符;不能声明为虚拟的或静态的等。还有实现接口的类就必需要实现接口中的全部方法和属性。

一个类能够支持多个接口,多个类也能够支持同样的接口。

抽象类能够给出一些成员的实现,接口却不包括成员的实现,抽象类的抽象成员可被子类部分实现,接口的成员须要实现类全然实现,一个类仅仅能继承一个抽象类,但可实现多个接口等等。

??

时间: 2024-10-12 11:56:56

C++中面向对象的理解的相关文章

java中面向对象的理解

面对对象就是: 把数据及对数据的操作方法放在一起,作为一个相互依存的整体--对象.对同类对象抽象出其共性,形成类.类中的大多数数据,只能用本类的方法进行处理.类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信.程序流程由用户在使用中决定.对象即为人对各种具体物体抽象后的一个概念,人们每天都要接触各种各样的对象,如手机就是一个对象.在面向对象的编程方式中,对象拥有多种特性,如手机有高度.宽度.厚度.颜色.重量等特性,这些特性被称为对象的属性.对象还有很多功能,如手机可以听音乐.

个人对golang的面向对象的理解------接口(interface)

golang是面向对象语言,但是他并没有class之类的关键字,他是通过struct和interface组合实现了面向对象的概念. 转载请注明出处:http://www.cnblogs.com/SSSR/p/6351661.html 在golang中面向对象的实现顺序: 1.先定义struct,是对象的属性值,如: type Person struct { id int name string} 2.定义对象需要实现的函数,如: func (self Person) codingEveryday

黑马程序员——Java基础---面向对象之理解

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 面向对象之理解 一:理解面向对象           1,什么是对象 对象就是实际生活中的事物,可以说一切事物都是对象.   如:桌子,椅子,电脑,电视机等. 对象的3个主要特征: a)对象行为:这个对象能做什么,既可以让这个对象完成什么

js面向对象深入理解

js面向对象深入理解 ECMAScript 有两种开发模式:1.函数式(过程化),2.面向对象(OOP).面向对象的语言有一个标志,那就是类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,ECMAScript 没有类的概念,因此它的对象也与基于类的语言中的对象有所不同. 一.创建对象 创建一个对象,然后给这个对象新建属性和方法. var box = new Object(); //创建一个Object 对象 box.name = 'Lee'; //创建一个name 属性并赋值 b

第二话:javascript中闭包的理解

闭包是什么? 通过闭包,子函数得以访问父函数的上下文环境,即使父函数已经结束执行. OK,我来简单叙述下,先上图. 都知道函数是javascript整个世界,对象是函数,方法是函数,并且js中实质性的面向对象相关也都是函数来实现和延伸,例如:"类". window:是指js中window类,也是js最高一层,因为什么这么说,因为你所有创建的方法和属性其实都在window之内.window中的所有方法,在自己创建的方法中都可以调到.可以仔细想想alert,在任何地方都可以alert,其实

C++中关键字的理解--Static

C++中关键字的理解---Static 目录:1.static缘起             2.static自我理解             3.static举例使用             4.总结 -------------------------------------------------------------------------------------------------- 1.static缘起         C语言是面向过程构架,多文件为单位的编码的优异之处在于保持不同

JavaScript中面向对象那点事

鉴于自己在JavaScript这方面比较薄弱,所以就找了一本书恶补了一下(被称为犀利书的JavaScript权威指南).书的内容虽然多了点,但这也充分说明了js中的东西还是挺多的.虽然我们的定位不是前端,但最好还是了解一下js这个发展了将近20年但依然很火的技术. 两年前,写过一篇关于JavaScript闭包的博客,所以对闭包这个词印象很深,在看这书的时候,又看到了闭包,那么这次再看闭包,会有什么不同的理解呢? 大家都知道,在JavaScript中是没有类的概念的,更没有私有.公有的成员变量这样

对java面向对象的理解

前言: 在写博客前我们应该有个好的定位,可以是对知识的梳理和理解,可以是一种新技术,可以是对难点易错的解析和理解. 正文: java面向对象的理解.面向说的通俗点就是针对,对象就是有实际意义的事物(万物皆对象)其实也就是java中的一个参数,但这个参数实际代表了某个东西(比如你有个类Tourism,这个类对 属性姓名.年龄.当Tourism tou = new Tourism(),这个tou参数就实际代表了一个类Tourism的有意义对象,而某一个方法tourism(Tourism tou)那么

Java面向对象的理解和实现代码

理解Java面向对象的重要知识点: 一. 类,对象 类?首先举一个例子:小李设计了一张汽车设计图,然后交给生产车间来生产汽车,有黑色的.红色的.白色的... 这里,汽车设计图就是我们说的类(class),生产车间就是new构造器(大部分对象都是new出来的),生产出来的汽车就是我们要说的对象.可以说java编程实质就是构建类的过程. 对象?万物皆对象,宇宙中,如植物,动物,人类,每个个体都是各司其职.各尽所能的.这就要求对象高内聚.低耦合(简单理解就是人的大脑,它负责思考,想象,记忆,而不能呼吸