三种访问权限

public:可以被任意实体访问

protected:只允许子类及本类的成员函数访问

private:只允许本类的成员函数访问

三种继承方式

public 继承

protect 继承

private 继承

组合结果

基类中 继承方式 子类中

public & public继承 => public

public & protected继承 => protected

public & private继承 = > private

protected & public继承 => protected

protected & protected继承 => protected

protected & private继承 = > private

private & public继承 => 子类无权访问

private & protected继承 => 子类无权访问

private & private继承 = > 子类无权访问

由以上组合结果可以看出

1、public继承不改变基类成员的访问权限

2、private继承使得基类所有成员在子类中的访问权限变为private

3、protected继承将基类中public成员变为子类的protected成员,其它成员的访问 权限不变。

4、基类中的private成员不受继承方式的影响,子类永远无权访问(使用using也不行)。

此外,在使用private继承时,还存在另外一种机制:准许访问 

我们已经知道,在基类以private方式被继承时,其public和protected成员在子类中变为private成员。然而某些情况下,需要在子类中将一个或多个继承的成员恢复其在基类中的访问权限。

C++支持以using方式实现该目的

使用访问声明,形式为 base-class::member;, 位置在子类中适当的访问声明处。

(注,C++Primer plus中说过只能恢复原有访问权限,而不能提高或降低访问权限,然而经测试只要原访问权限不是private,都可提高或低于原访问权限,

可能是编译器规则没有完全支持C++规范)

c++ 中为什么要定义public protect private 三种访问权限?

有些我们需要给外面看的,也就是对外接口,那么就是public,如果没有,那么我们做的工作将是毫无意义的,(别人没法用)

如果我们不想让别人知道内部的实现细节,那么就是private,比如,我们这么:

public:

count()

{

  mycount();

}

private:

  mycount();

这样的,count是对外的接口,而实现的时候,我们不想让外面知道怎么实现的,就用private,防止它用mycount!

如果我们不想让别人知道,想让自己的孩子什么的知道(这里涉及到继承),那么就可以作为protected!

这样的话,private是自己私有的,protected是可以让孩子知道的,public是公开的!

转载:http://www.cnblogs.com/BeyondAnyTime/archive/2012/05/23/2514964.html

因为有需求,所以才有这样 的设计!

c++三种继承方式public,protect,private的更多相关文章

  1. C++的三种继承方式简述

    C++对父类(也称基类)的继承有三种方式,分别为:public继承.protected继承.private继承.三种继承方式的不同在于继承之后子类的成员函数的"可继承性质". 在说 ...

  2. C++继承(一) 三种继承方式

    继承定义 继承是使代码可以复用的重要手段,也是面向对象程序设计的核心思想之一. 继承就是不修改原有的类,直接利用原来的类的属性和方法并进行扩展.原来的类称为基类,继承的类称为派生类,他们的关系就像父子 ...

  3. mfc 类三种继承方式下的访问

    知识点 public private protected 三种继承方式 三种继承方式的区别 public 关键字意味着在其后声明的所有成员及对象都可以访问. private 关键字意味着除了该类型的创 ...

  4. C++三种继承方式

    一.三种继承方式 继承方式不同,第一个不同是的是派生类继承基类后,各成员属性发生变化.第二个不同是派生类的对象能访问基类中哪些成员发生变化.表格中红色标注.

  5. C++ 中三种继承方式的理解

    一.公有继承(public inheritance) 1.概念:当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,而基类的私有成员不可以直接访问. 实验一下:   我们用代 ...

  6. C++中的三种继承方式

    1,被忽略的细节: 1,冒号( :)表示继承关系,Parent 表示被继承的类,public 的意义是什么? class Parent { }; class Child : public Parent ...

  7. C++的三种继承方式详解以及区别

    目录 目录 C++的三种继承方式详解以及区别 前言 一.public继承 二.protected继承 三.private继承 四.三者区别 五.总结 后话 C++的三种继承方式详解以及区别 前言 我发 ...

  8. js的三种继承方式及其优缺点

    [转] 第一种,prototype的方式: //父类 function person(){ this.hair = 'black'; this.eye = 'black'; this.skin = ' ...

  9. C++中的类继承(1) 三种继承方式

    继承是使代码可以复用的重要手段,也是面向对象程序设计的核心思想之一.简单的说,继承是指一个对象直接使用另一对象的属性和方法.继承呈现了 面向对象程序设 计的层次结构, 体现了 由简单到复杂的认知过程. ...

随机推荐

  1. MongoDB在已有账号的实例下还原数据库报错的分析(error applying oplog)

    一. 背景 今天在MongoDB 4.0.4版本下,在还原恢复数据库时报错. 主要错误为: Failed: restore error: error applying oplog: applyOps: ...

  2. 我的第一个python web开发框架(30)——定制ORM(六)

    在开发中,查询操作是使用最多的,而查询列表是其中之一,查询列表可分为分页查询和不分页查询(它们之间多了一次总记录数查询),还可以分为单表查询和多表关联查询,返回的结构体根据前端使用的表单框架不同而有所 ...

  3. 英语进阶系列-A06-本周总结

    本周总结 目录Content 英语进阶系列-A01-再别康桥 英语进阶系列-A02-英语学习的奥秘 英语进阶系列-A03-英语升级练习一 英语进阶系列-A04-英语升级练习二 英语进阶系列-A05-英 ...

  4. LInkedHashMap实现最近被使用(LRU)缓存

    在最近的面试中,我曾被多次问到,怎么实现一个最近最少使用(LRU)的缓存.缓存可以通过哈希表来实现,然而为这个缓存增加大小限制会变成另一个有意思的问题.现在我们看一下怎么实现. 最近最少使用缓存的回收 ...

  5. JetBrains 全套激活 Pycharm Clion 高校学生老师免费用

    https://www.jetbrains.com/store/?fromMenu#edition=discounts https://www.jetbrains.com/zh/student/ 用高 ...

  6. vue.js sha256加密

    sha256: 1.使用cnpm安装 :cnpm install js-sha256 2.然后在组件中methods定义方法,在调用 let sha256 = require("js-sha ...

  7. A. Points in Segments(cf a题, 水题)

    没什么好说的 #include<iostream> using namespace std; ], x, y,n, m, ans; int main(){ cin>>n> ...

  8. linux目录2

    19.linux注释多行 20.防火墙 21.创建逻辑卷 22.两台主机,ssh端口不同,如何拷贝文件    

  9. redis 初步认识四(redis锁,防并发)

    using System; namespace ConsoleAppRedis { class Program { static void Main(string[] args) { //第一种,无登 ...

  10. ansible 与 Jinja2的结合

    1.文件架构 [root@master template]# tree . ├── jinj2_test.yml ├── meta ├── tasks ├── templates │   └── te ...