OOP思想--封装和继承
本篇主要讲面向对象的封装和继承特性,另一个特性多态会在后面的文章中讲到。
目录:
面向对象编程过程
封装的实现
继承的方式
继承后对象的构造顺序
继承的种类
一、什么是面向对象编程(Object Oriented programming,OOP)思想?
在学习C++之前我们一直说面向过程,也就是对于一个需要解决的问题,进行分析,得出每个步骤的实现和实现顺序的过程。所以自然而然的就能够进行面向过程编程,既只需用函数实现这些步骤,然后在使用的时候一个一个进行调用即可。但是为了实现代码的可移植性和可扩展性,就有了面向对象。就是把构成问题的事物分解成各个对象,然后描述某一类对象在解决整个问题步骤中的行为。用一幅图来描述面向对象编程的过程。
有了面向对象编程技术,因此(程序=算法+数据结构)变为了(程序=基于对象的算法+以对象为最小单位的数据结构)
二、封装:隐藏内部实现。
封装如何实现?在C++里边,封装和隐藏是通过访问限定符来实现。
三种访问限定符:
public:任意位置都能访问成员变量。
protected:只在类中可以访问,包括继承和派生中派生类可以访问父类的保护成员。
private:只有在自己的类中可以访问,但是友元关系可以打破。
说到这块了,顺便也说一下struct和class的区别
1、对于class来说定义的变量和函数默认是private,对于struct来说默认是public
2、在struct类中定义该类成员要写全称。//struct B{struct B *p;};
3、空结构体:
在windows上:C语言不允许定义空结构体、C++定义空结构体大小为1个字节。
在Linux上:C语言定义空结构体大小为0个字节、C++定义空结构体大小为1个字节。
class定义空结构体为1个字节。
三、继承:实代码复用。
(1)、继承的方式
有三种访问限定自然也就有三种继承关系咯!分别叫做共有继承、保护继承、私有继承。如果不给出继承关系默认是私有继承。
写法如下:
class Base
{……
};
class derive : Base
{……
};
在C++中冒号用到两个地方,分别是继承和初始化列表中。
不同的继承方式又对成员变量的访问有什么影响呢?用一张表总结一下:
基类中变量的访问限定 | 派生类中继承过来的访问限定 | 外部对派生类中成员变量的访问 | |
共有继承 | public | public | 能 |
protected | protected | 不能 | |
private | 不可见 | 不能 | |
保护继承 | public | protected | 不能 |
protected | protected | 不能 | |
private | 不可见 | 不能 | |
私有继承 | public | private | 不能 |
protected | private | 不能 | |
private | 不可见 | 不能 |
(2)、继承后对象的构造顺序
1、基类构造函数:如果有多个基类,构造函数的调用顺序是某类在类派生表中出现的顺序,而不是他们在成员初始化列表中出现的顺序。
2、成员类对象的构造函数:如果有多个成员类对象,则构造顺序是对象在类中被申明的顺序,而不是他们出现在成员初始化列表中的顺序。
3、派生类构造函数。
(3)、继承的种类
1、单一继承
2、多重继承
3、重复继承
对于这几种继承其中对成员变量的访问还是结合上面的表格分析即可。
OOP思想--封装和继承相关推荐
- Java基础-OOP特性之封装、继承、多态、抽象
为什么80%的码农都做不了架构师?>>> //要习惯将程序(功能.代码)模块化 //OOP四大特性:封装.继承.多态.抽象 //OOP的核心:封装一个类,把数据抽象出来,再把方 ...
- 学习面向对象思想,开始考虑通过封装、 继承、多态把程序的耦合度降低
学习面向对象思想,开始考虑通过封装. 继承.多态把程序的耦合度降低 转载于:https://www.cnblogs.com/Andys/archive/2013/04/05/3001175.html
- Python面对对象编程——结合面试谈谈封装、继承、多态,相关习题详解
1.面向对象的三大特征 封装:属性和方法放到类内部,通过对象访问属性或者方法,隐藏功能的实现细节.当然还可以设置访问权限; 继承:子类需要复用父类里面的属性或者方法,当然子类还可以提供自己的属性和方法 ...
- java程序员从笨鸟到菜鸟之_Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)...
Java是一种面向对象的语言,这是大家都知道的,他与那些像c语言等面向过程语言不同的是它本身所具有的面向对象的特性--封装,继承,多态,这也就是传说中的面向对象三大特性 一:从类和对象开始说起: Oo ...
- 面向对象的理解及相关概念(封装,继承,多态)
前言 面向对象程序设计(OOP)是当今主流的程序设计范性,它取代了结构化或过程式编程技术. 一.面向对象是什么? 1.定义: 面向对象就是:把数据及对数据的操作方法放在一起,作为一个相互依存的整体-- ...
- Java面向对象三大特性(封装、继承、多态)
文章目录 前言 一.封装 1. 封装的概念 2. private实现封装 3. getter和setter方法 4.封装的好处 二.继承 1. 继承的概念 2. extends实现继承 3. supe ...
- Java-Day12 面向对象的三大特征之封装、继承,单例模式(饿汉式、懒汉式)、方法重写 (覆盖)、注解 (annotation)、super关键字、对象的创建流程超详细
目录 1. 面向对象的三大特征之封装 1.1 封装的含义 1.2 封装的目的 1.3 封装的优点 1.4 封装的实现过程 1.5 拓展知识:JavaBean 2. 面向对象的三大特征之继承 2.1 继 ...
- 三分钟了解Java OOP思想
Java OOP 思想深度刨析 Java面向对象编程 面向对象编程简称OOP(Object--对象.Oriendted--导向的.Programming--程序设计) 面向对象通俗来讲,就是指使用丰富 ...
- Java基础 - 1 OOP思想
(Object-Oriented Programming,OOP)//(面向对象编程,OOP) OOP是一种编程思想,OOP的基本原则是组合,由单个能够起到子程序作用的单元或对象组合而成,即面向对象编 ...
- 面向对象的 JavaScript:封装、继承与多态
本文作者:家园工作室研发组成员 @维尔希宁 本文出处: 面向对象的 JavaScript:封装.继承与多态blog.lenconda.top 本文遵循署名-非商业性使用-禁止演绎3.0 未本地化版本 ...
最新文章
- C#面向对象(一) 封装
- 分析Android :java.lang.UnsatisfiedLinkError: dlopen failed * is 32-bit instead of 64-bit
- google的api key调用次数是多少_Sprint Boot如何基于Redis发布订阅实现异步消息系统的同步调用?...
- 26岁一年发4篇Cell,他说搞科研要有“十诫”
- Flask 蓝图机制及应用
- linux pn,Linux环境变量设置--总结
- 你是这样理解shell编程的嘛?
- 华为 “OSPF” 被动接口配置
- Linux内核同步原语之信号量(Semaphore)
- iOS系统语音播报文字
- Cisco nat inside接口,outside接口,nvi接口的区别
- sketch html尺寸,sketch教程 | 设置常用画板尺寸
- 软件设计师刷题与知识点总结 笔记
- 对方启用和留言是什么意思_美国人老说“How so”?到底啥意思?“怎么这样”吗?...
- CES 2020最佳科技产品官方入围名单!三星笑了
- python中有序序列是什么意思_Python中序列是什么
- Intel CPU架构处理器漏洞越捅越大 打补丁将损失30%性能
- springboot毕设项目基于Java酒店管理系统53blc(java+VUE+Mybatis+Maven+Mysql)
- Qt通过QNetworkAccessManager下载
- 2022-2027年中国眼科医疗行业市场全景评估及发展战略规划报告