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++中冒号用到两个地方,分别是继承和初始化列表中。

不同的继承方式又对成员变量的访问有什么影响呢?用一张表总结一下:

 基类中变量的访问限定派生类中继承过来的访问限定外部对派生类中成员变量的访问
共有继承publicpublic
 protectedprotected不能
 private不可见不能
保护继承publicprotected不能
 protectedprotected不能
 private不可见不能
私有继承publicprivate不能
 protectedprivate不能
 private不可见不能

(2)、继承后对象的构造顺序

1、基类构造函数:如果有多个基类,构造函数的调用顺序是某类在类派生表中出现的顺序,而不是他们在成员初始化列表中出现的顺序。

2、成员类对象的构造函数:如果有多个成员类对象,则构造顺序是对象在类中被申明的顺序,而不是他们出现在成员初始化列表中的顺序。

3、派生类构造函数。

(3)、继承的种类

1、单一继承


2、多重继承


3、重复继承


对于这几种继承其中对成员变量的访问还是结合上面的表格分析即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值