面向对象思想

面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。

起初,“面向对象”是专指在程序设计中采用封装、继承、多态和抽象等设计方法。可是目前面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOA,Object Oriented Analysis),面向对象的设计(OOD,Object Oriented Design)、以及我们经常说的面向对象的编程实现(OOP,Object Oriented Programming)。

面向对象三大特征:

①封装

封装是指将数据与具体操作的实现代码放在某个对象内部,使这些代码的实现细节不被外界发现,外界只能通过接口使用该对象,而不能通过任何形式修改对象内部实现,正是由于封装机制,程序在使用某一对象时不需要关心该对象的数据结构细节及实现操作的方法。使用封装能隐藏对象实现细节,使代码更易维护,同时因为不能直接调用、修改对象内部的私有信息,在一定程度上保证了系统安全性。

②继承

面向对象之所以使用继承机制主要是用于实现代码的复用多个类所公用的代码部分可以只在一个类中提供,而其他类只需要继承即可。

③多态

多态是指在继承体系中,所有派生类都从基类继承接口,但由于每个派生类都是独立的实体,因此在接收同一消息的时候,可能会生成不同的响应。多态的作用作为隐藏代码实现细节,使得代码能够模块化;扩展代码模块,实现接口重用。简单来说:一种行为产生多种效果。

总的来说:封装可以隐藏实现细节同时包含私有成员,使得代码模块化并增加安全指数;继承可以扩展已存在的模块,目的是为了代码重用;多态则是为了保证:类在继承和派生的时候,保证家谱中任何类的实例被正确调用,实现了接口重用。

#include<iostream>
using namespace std;class people
{
public:void eat(){cout << "eat" << endl;}virtual void speak(){cout << "hahaha!" << endl;}
private:int a;int b;
};//封装性
class student :public people//继承性
{
public:virtual void speak(){cout << "nihaoma" << endl;}
private:int b;
};int main()
{student s;people *p = &s;p->speak();//多态性people peo;people *pp = &peo;pp->speak();
}

C++同名函数的关系

成员函数被重载的特征:

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

(2)函数名字相同;

(3)参数不同;

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

覆盖是指派生类函数覆盖基类函数,特征是:

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

(2)函数名字相同;

(3)参数相同;

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

“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,

规则如下:

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

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

C++三种继承的访问权限控制

众所周知,C++类中的成员(函数/变量)拥有三种访问权限:

public:用该关键字修饰的成员表示公有成员,该成员不仅可以在类内可以被访问,在类外也是可以被访问的,是类对外提供的可访问接口;

private:用该关键字修饰的成员表示私有成员,该成员仅在类内可以被访问,在类体外是隐藏状态;

protected:用该关键字修饰的成员表示保护成员,保护成员在类体外同样是隐藏状态,但是对于该类的派生类来说,相当于公有成员,在派生类中可以被访问。

对一个类的派生类来说,在继承基类的过程中,不仅包含了基类的所有成员,还增加了自己的成员,而派生类中成员的访问权限则会因为继承权限方式的不同而不同。

相对于派生类成员的访问权限比较简单(派生类成员的访问权限就是取决于派生类中定义的权限),从基类中继承的成员的访问权限就相对较为复杂,这并不是简单地照搬基类的成员访问权限。基类成员在派生类中的访问权限与继承的方式有着密切的关系,在不同的继承方式下,访问权限也是不同的,总结如下:

若继承方式是public,基类成员在派生类中的访问权限保持不变,也就是说,基类中的成员访问权限,在派生类中仍然保持原来的访问权限;

若继承方式是private,基类所有成员在派生类中的访问权限都会变为私有(private)权限;

若继承方式是protected,基类的共有成员和保护成员在派生类中的访问权限都会变为保护(protected)权限,私有成员在派生类中的访问权限仍然是私有(private)权限。

总结上述规则,可以如下表所示:

面向对象思想、特征等相关推荐

  1. c++局部对象是什么_面向对象三大特征: 封装

    今日内容 面向对象概述 类和对象的关系 面向对象内存图 private.this关键字和封装 面向对象之构造方法 面向对象三大特征 封装 继承 多态 01. 面向过程和面向对象思想概述 什么是面向过程 ...

  2. Python__面向对象思想

    目录 一.Python中的面向对象思想 二.类和对象 Python 是一种面向对象的编程语言,不过,Python 与 C++ 一样,还支持面向过程的程序设计.在 Python 中完全可以使用函数.模块 ...

  3. java面向对象的特征 —(13)

    面向对象的特征一:封装与隐藏 1.为什么要引入封装性? 我们程序设计追求"高内聚,低耦合". 高内聚 :类的内部数据操作细节自己完成,不允许外部干涉: 低耦合 :仅对外暴露少量的方 ...

  4. 第一节:从面向对象思想(oo)开发、接口、抽象类以及二者比较

    一. 面向对象思想 1. 面向过程(OP)和面向对象(OO)的区别: (1):面向过程就是排着用最简单的代码一步一步写下去,没有封装,当业务复杂的时候,改动就很麻烦了 (2):面向对象将复杂的业务分离 ...

  5. java基础(一)-面向对象思想

    前言 java是一门面向对象的语言,在学习java前,先要理解面向对象这个概念,区别于c这类的面向过程语言,面向对象有着什么一样的特点呢?先上一张思维导图吧: 对象 什么是对象 问题空间中的元素及其在 ...

  6. 菜鸟学习笔记:Java基础篇4(面向对象三大特征)

    菜鸟学习笔记:Java面向对象篇中 继承 概念 方法重写(override) Object类 Super关键字 组合 final关键字补充 封装 访问控制符 多态 继承 概念 继续上一篇的例子: #m ...

  7. 菜鸟学习笔记:Java基础篇3(面向对象思想、程序执行过程内存分析、面向对象重要概念)

    菜鸟学习笔记:Java面向对象篇上 Java面向对象的思想 Java程序执行过程内存分析 Java垃圾回收机制 构造方法 方法重载(overload) static关键字 this关键字 Java面向 ...

  8. 面向对象思想----不看懊悔!

    面向对象思想----不看懊悔! 前言: 整理这份资料的目的是为了帮助朋友们可以更直观的理解面向对象的编程.让后来者可以少走一些弯路.但当中不免有很多漏洞及错误,也还 请前辈提出宝贵的更改意见,毕竟交流 ...

  9. A. 面向对象思想介绍

    一,面向对象思想介绍           二,举例 三,面向对象编程思想的3个特征: 转载于:https://www.cnblogs.com/youyuanjuyou/p/8120797.html

最新文章

  1. 基于地平面的单目视觉里程计绝对尺度估计
  2. Maven全局配置文件settings.xml 全解
  3. 饥荒海难机器人怎么用_饥荒海难机器人作用详解 机器人有什么用
  4. 【Node核心模块HTTP】
  5. Py之torchvision:torchvision库的简介、安装、使用方法之详细攻略
  6. 使用docker快速启动jetlinks
  7. 细粒度权限控制 linux,FGAC(细粒度访问控制)/VPD
  8. Node.js 使用jQuery取得Nodejs http服务端返回的JSON对象示例
  9. 【数据结构(C语言)】数据结构-查找
  10. Transact-SQL 语法约定
  11. stata:数据包络分析(DEA)简明教程
  12. 西瓜数据集的各种版本,比如说2.0,3.0,4.0都在这
  13. 红外接收C语言实现 NEC 定时器
  14. _003_WindowsOperation_为什么升级win10后,很多软件打开就显示文件系统错误(-1073741819)
  15. 电子设计教程29:滞回比较器(施密特触发器)
  16. 美国大力发展量子产业,国会直接指定能源部制定量子系统访问路线图
  17. 震惊:竟然有大神做出了地府后台管理系统!!!
  18. 李开复给中国大学生的第六封信—选择的智慧
  19. 面经系列:2020年联发科技数字IC设计岗
  20. Doris Weekly FAQ】2021.07.19~2021.08.01

热门文章

  1. 牧师与恶魔过河游戏——智能提示
  2. 文件中读取学生基本信息c语言,求助!C语言 (学生信息管理系统) 不会啊,才学了半学期……...
  3. java ssl server,Java SSL Server禁用弱椭圆曲线
  4. linux脚本遍历目录,shell脚本递归遍历目录及子目录的例子分享
  5. channelsftp 上传文件为空_文件上传踩坑记及文件清理原理探究
  6. 敬伟PS学习笔记(一)
  7. 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。
  8. 部分CIA的漏洞利用工具干货请查收
  9. JHipster生成单体架构的应用示例
  10. css中易掉坑的知识点总结系列(一)