面向对象程序设计基本概念

重点: C++中的 多态 和 指针间接赋值

1): 多态的三个条件
        a: 子类继承父类
        b: 虚函数(虚表及虚表指针)
        c: 父类引用或指针指向子类对象(参数类型的逆变和返回类型的协变)
                // 参数类型的逆变(contravariance)是指实现的参数类型是接口或委托定义的参数类型的父类。
                // 返回类型的协变(covariance)指返回类型是接口或委托定义返回类型的子类

2): 指针间接赋值的三个条件
        a: 外部实参和内部形参
        b: 外部实参取地址传给内部形参
        c: 形参通过解引用可以间接修改了外部实参

3): 变量名和变量地址:
        变量名实际上是一个符号地址,在对程序编译连接时由系统给每一个变量名分配一个内存地址。在程序中从变量中取值,实际上是通过变量名找到相应的内存地址,从其存储单元中读取数据。

 

1、对象
定义:对象是指客观存在的事物,由一组属性和行为构成。

对象 = 属性 + 行为

在面向对象程序设计中,对象之间也需要联系,我们称作对象的交互。

2、类
定义:

(1)类是具有共同特征的对象的抽象。

(2)类是对具有共同属性和行为的一类事物的抽象描述。 共同的属性被描述为类的数据成员,共同行为被描述为类的成员函数。

3、实例
定义:实例是由类所创建的具体对象,即给类定义的数据赋予具体值,操作赋予确定处理程序而所获得的实际对象。

4、消息
定义:

(1)一个对象向另一个对象发出的请求。

(2)是向某对象请求服务的一种表达方式,是对象与外界、对象与其他对象之间联系的工具。

性质:

(1)同一个对象可以接收不同形式的多个消息,作出不同的响应。

(2)相同形式的消息可以传递给不同的对象,所作出的响应可不同。

(3)消息的发送可以不考虑具体的接受者。

5、方法
定义:是对某对象接收消息后所采取的操作的描述。

6、抽象
定义:对实例进行分析,抽取出共同性质。

7、封装(Encapsulation)
定义:

(1)将数据抽象的外部接口与内部实现的细节清楚地分开

(2)封装就是将抽象得到的数据和行为相结合,形成一个有机的整体

作用:

(1)可以隐藏实现细节,使得代码模块化。

(2)封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,一特定的访问权限来使用类的成员。

(3)封装主要依靠对类、数据和方法的访问控制,从语法上讲就是加上private、protected、public等关键词。

(4)封装的意义在于保护或者防止代码(数据)被我们无意中破坏。在面向对象程序设计中数据被看作是一个中心的元素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改。

8、继承(InHeritance)
定义:

(1)子类可以从父类继承属性和操作,提高编程效率

(2)通过继承关系利用已有类构造新类

作用:代码重用

(1)避免代码重复开发,减少代码和数据冗余

(2)通过增强一致性来减少模块间的接口和界面

9、多态(Polymorphism)
定义:

(1)不同的对象收到相同的消息时产生多种不同的行为方式。

(2)多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术。

(3)允许将子类类型的指针赋值给父类类型的指针。

(4)同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

作用:接口重用

(1)编译时的多态性

通过函数重载和运算符重载实现。

对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

(2)运行时的多态性

通过类的继承关系和虚函数来实现。

程序在执行前根据函数名和参数无法确定应该调用哪个函数,必须在程序执行的过程中根据具体的情况来动态确定。

编译时的多态性为我们提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。

实现

(1)接口多态性

(2)继承多态性

(3)通过抽象类实现的多态性

10、重载(Overload)
定义:将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同)

特征:

(1)相同的范围(在同一个类中);

(2)函数名字相同;

(3)参数不同;

(4)virtual 关键字可有可无。

11、重写(Overwrite)
定义:是指派生类的函数屏蔽了与其同名的基类函数

特征:

(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。

12、覆盖(Override)
定义:是指派生类函数覆盖基类函数

特征:

(1)不同的范围(分别位于派生类与基类);

(2)函数名字相同;

(3)参数相同;

(4)基类函数必须有virtual 关键字。

13、面向对象程序设计
定义:面向对象程序设计是一种新的程序设计范型。

特征:

程序 = 对象 + 消息

主要特点:

(1)程序由类的定义和类的使用两部分组成,

在主程序中定义各对象并规定它们之间传递消息的规律。

(2)程序中的一切操作都是通过向对象发送消息来实现的,

对象接收到消息后,启动有关方法完成相应操作。

(3)类有继承关系产生相互间的关系

14、面向过程程序设计
定义:采用模块化、按照解决问题的步骤分步设计程序。

面向过程程序设计思想的核心--功能分解

面向过程程序设计将数据结构和过程作为两个实体对待,重点在过程。

程的设计存在以下缺点:

(1)可重用性差

(2)可维护性差

(3)安全性差

上缺点的原因:数据和过程的分离

面向对象程序设计基本概念相关推荐

  1. java面向对象程序设计第三版耿祥义pdf_java基础知识干货——封装

    很多java初学者,在学到Java面向对象方面的知识点的时候,会觉得这块的知识点真的蛮绕的,一个知识点一个知识点的往外冒,对于初学者来说区分构造器和方法就花费了一整天的时间.现在小编带大家重新过一遍知 ...

  2. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第二章:类和对象初步(新标准C++程序设计)

    以下内容为笔者手打,望读者珍惜,如有转载还请注明. chapter2:类和对象初步 数据结构+算法=程序 $2.1结构化程序设计的不足     结构化程序设计也称面向过程的程序设计,过程是用函数实现的 ...

  3. 第一节课 面向对象程序设计——认识对象

    面向对象程序设计及设计模式 --认识对象 一. 教学目标 1.   深刻了解"面向对象程序设计"的概念 2.   了解对象的特点 二. 教学重点 认识对象,分清事对象和物对象,分清 ...

  4. 面向对象程序设计中“超类”和“子类”概念的来历

    众所周知,在面向对象程序设计中,子类从超类中继承数据成员和成员方法,然后在此基础上再根据实际需要进行扩展并增加属于子类的数据成员和成员方法.也就是说,子类的对象比超类的对象具有更加丰富的属性,或者具有 ...

  5. C++面向对象程序设计概念全总结(六)--最全的概念总结

    1.对象和类概念 对象:任何一个对象都应该具备两个要素:属性.行为. 在C++中每个对象都有数据(体现了'属性')和函数(用来对数据进行操作,以实现某些功能)两部分组成. 类:具有共性的实体的抽象. ...

  6. 初学者C++面向对象程序设计概念全总结最全的概念总结

    1.对象和类概念 对象:任何一个对象都应该具备两个要素:属性.行为. 在C++中每个对象都有数据(体现了'属性')和函数(用来对数据进行操作,以实现某些功能)两部分组成. 类:具有共性的实体的抽象. ...

  7. VB.NET面向对象程序设计的基本概念

    一.类和对象 面向对象程序设计(Object-Oriented programming)OOP是一种系统化的程序设计方法,强调直接以问题域(即现在世界)中的事物为中心来考虑问题,并按照这些事物的本质特 ...

  8. 面向对象程序设计的基本概念

    1.基本术语 (1) 对象和对象类 对象是代码和数据的组合,可以作为一个单位来处理.对象可以是应用程序的一部分,比如可以是控件或窗体.整个应用程序也是一个对象. VB中的每个对象都是用类定义的.用饼干 ...

  9. 面向对象编程概念_如何向6岁的孩子解释面向对象的编程概念

    面向对象编程概念 by Alexander Petkov 通过亚历山大·佩特科夫(Alexander Petkov) Have you noticed how the same cliche ques ...

最新文章

  1. ES6中的Promise详解
  2. 鸿蒙之后华为把欧拉也捐了,还承诺不做欧拉商用发行版
  3. 协同过滤的itemCF,userCF区别适用场景
  4. 华为swot分析2020_2020华为音频产品汇总分析,完善产品质量,丰富产品线
  5. 【原】webpack--plugins,主要解释plugins干了啥
  6. Error running ‘transmission‘: Unable to open debugger port (127.0.0.1:52469): java.net.SocketExcepti
  7. 大到创业,小到做一份副业
  8. 接口测试-解析har文件
  9. 模块EMERSONDELTAVSLS1508/本特利330400-02-CN
  10. 1.13 打印机和工作簿的打印设置 [原创Excel教程]
  11. 通过PostMessage/SendMessage实现模拟键盘鼠标按键,发送不成功或出现重复按键的可参考本文
  12. qq邮件中插入html,qq邮箱如何添加标签
  13. 大数据的主要学习内容有哪些?
  14. java 相关论坛或网站
  15. delphi 向窗体发送一个字符串_IoT Hub入门(2)模拟设备发送设备到云(d2c)的消息
  16. 吕本富:中国Web2.0缺乏创新 与美国差距拉大
  17. c语言两千行以内代码,C语言的教务管理系统(2000行代码)(106页)-原创力文档
  18. ArcGIS Runtime SDK是什么?
  19. Angular 4 Http
  20. Lambert(兰勃托)投影--我国天气图底图广泛采用的一种投影

热门文章

  1. Spring-基于注解的配置[03Bean作用范围和生命周期方法]
  2. SpringtBoot+SpringSecurity+Jwt+MyBatis整合实现用户认证以及权限控制
  3. celery 可视化_在Flask中使用Celery进行多任务分布执行
  4. pyqt5教程11:绘制外观
  5. 半监督分类算法_用图网络进行半监督分类
  6. python编程前面需要一个空格怎么做_初学python,不明白代码之间时空格的用处
  7. 【TypeScript】使用 const 关键字声明只读变量
  8. arr.sort的排序原理
  9. in use 大学英语4word_2015年7月中国医科大学《大学英语4》在线作业答案
  10. 【目标检测】Fast RCNN算法详解