C++中类继承public,protected和private关键字作用详解及派生类的访问权限
注意:本文有时候会用Visual Studio Code里插件的自动补全功能来展示访问权限的范围(当且仅当自动补全范围等价于对象访问权限范围的时候),但是不代表只要是出现在自动补全范围内的可调用对象/成员都是合法的。
一,公有继承
#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
#include<vector> class Base{
public:
int PublicBase;
void PublicPrint() {std::cout << "PublicPrint()" << std::endl;}
protected:
int ProtectedBase;
void ProtectedPrint() {std::cout << "ProtectedPrint()" << std::endl;}
private:
int PrivateBase;
void PrivatePrint() {std::cout << "PrivatePrint()" << std::endl;}
}; class Derived : public Base{
public:
void DerivedPrint() {
std::cout << "DerivedPrint()" << std::endl;
std::cout << ProtectedBase << std::endl;
//若要访问protected的数据成员需要通过派生类里的成员函数访问
PublicPrint();
ProtectedPrint();
}
}; int main(void)
{
Derived der;
der.PublicPrint();
der.PublicBase;
//der.ProtectedBase; //不能直接访问protected数据成员
//der.ProtectedPrint();//意思同上
return ;
}
公有继承的派生类可以直接访问基类的public中的数据成员和成员函数,不能直接访问protected中的数据成员和成员函数,若要访问protected的数据成员需要通过派生类里的成员函数访问。基类里的private成员函数及数据成员派生类是没有访问权限的。但是我们可以通过间接调用Base::function()来访问Base类里的private对象。
派生类成员函数的访问权限一览:

用户的访问权限一览(非常显然了):

其实再添几行代码,很容易知道Derived的派生类访问权限(SeconedDerived类是Derived的公有继承):

二,保护继承
部分代码改变如下:
class Derived : protected Base{
public:
void DerivedPrint() {
std::cout << "DerivedPrint()" << std::endl;
std::cout << ProtectedBase << std::endl;
//若要访问protected的数据成员需要通过派生类里的成员函数访问
PublicPrint();
ProtectedPrint();
}
};
通常保护继承的派生类访问基类成员的权限和公有继承的派生类访问基类成员的权限相同,保护继承的派生类对象访问父类成员的权限和私有继承子类对象访问父类成员的权限相同。(der是Derived实例)


可以看出派生类的访问权限并没有什么改变。但是派生类会将所有从基类继承的成员全部放到protected下。不多赘述。
三,私有继承
部分代码改变如下:
class Derived : private Base{
public:
void DerivedPrint() {
std::cout << "DerivedPrint()" << std::endl;
}
};
私有继承的过程中,基类中的public和protected属性的成员在派生类中虽然能被访问,但是其属性在派生类中被降级为private,可以当作Derived类的private来访问。
C++中类继承public,protected和private关键字作用详解及派生类的访问权限的更多相关文章
- PHP中public,private,protected,abstract等关键字用法详解
PHP中常用的关键字 在PHP中包含了很多对函数和类进行限制的关键字,常用的通常有abstract,final,interface,public,protected,private,static等等, ...
- public,protected,friendly,private的访问权限
请说出作用域public,private,protected,以及不写时的区别 这四个作用域的可见范围如下表所示. 说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly. 作用域 ...
- Java访问权限修饰符public protected friendly private用法总结(转载好文Mark)
首先声明:Java中,friendly这个修饰符并没有显式的声明,在成员变量和方法前什么修饰符也不用,默认的就是friendly.为了条理清晰,分三种不同情况来总结. 一 访问权限修饰符修饰成员变量和 ...
- Java学习笔记(4)----Public,Protected,Package,Private修饰符可见性
Java修饰符类型(public,protected,private,friendly) public的类.类属变量及方法,包内及包外的任何类均可以访问:protected的类.类属变量及方法,包内的 ...
- java 修饰符的作用一(public protected default private 组)
1.public protected default private 组 public 权限最大,同类,同包,不同包,同包子类父类之间,不同包子类父类之间都可以访问. java 默认的权限是defau ...
- java四种权限修饰符(public > protected > (default) > private)
权限修饰符在哪里可以访问 (default) : 表示什么权限修饰符都不写 位置 public protected (default) private 同一个类 yes yes yes yes 同一个 ...
- java中的 public protected friendly private
1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直 ...
- 【java基础】(1)Java的权限修饰符(public,protected,default,private)
访问权限修饰符权限从高到低排列是public ,protected ,default, private. 一.根据“是否是同包”.“是否是子类”分为4中情况+本类 5种情况 二.把 同包中的子类 ...
- 窥探Swift之类的继承与类的访问权限
上一篇博客<窥探Swift之别具一格的Struct和Class>的博客可谓是给Swift中的类开了个头.关于类的内容还有很多,今天就来搞一下类中的继承以及类的访问权限.说到类的继承,接触过 ...
随机推荐
- iOS视频随笔(一)
实例化对象init [AFNetworkActivityIndicatiorManager shareManager].enable = Yes; //开启网络请求指示 scrollView.cont ...
- 关于UDP的检验和计算(附代码)
关于UDP的检验和计算(附代码) 在下午的学习过程中https://www.cnblogs.com/roccoshi/p/13032356.html 有一张图讲述了UDP的校验方法, 如下: 老师只粗 ...
- Python绘图之Turtle库详解(1)
Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行 ...
- IP组网实验(使用Cisco Packet Tracer路由器模拟软件)
最近计网课讲到了以太网,第二个计网实验就是IP组网实验.这个实验主要使用了netsim这个路由器模拟软件.怎奈mac上没有,于是用Cisco Packet Tracer进行了一次模拟(其实就是实验中的 ...
- maven配置错误之Unable to import maven project: See logs for details
很多朋友在初次使用maven时,都会出现这个问题. 一加载maven项目,即会报出Unable to import maven project这样的错误,哪怕是新的maven项目也不例外. 我查阅了很 ...
- SpringBoot 缓存工作原理
1. 自动配置类:CacheAutoConfiguration 2. 缓存的配置类: org.springframework.boot.autoconfigure.cache.GenericCache ...
- PHP丨PHP基础知识之流程控制for循环「理论篇」
今天公司同事在看for循环,那么我们今天就来讲讲for循环吧! for循环是编程语言中一种循环语句,而循环语句由循环体及循环的判定条件两部分组成,其表达式为:for(单次表达式;条件表达式;末尾循环体 ...
- python中列表,元组,字符串 互相转换
#-*-coding:utf-8-*- #1.字典dict = {'name': 'Zara', 'age': 7, 'class': 'First'} #字典转为字符串,返回:<type 's ...
- CF #640 (div4)
CF640 div4 草 迟到半个月的补题 真正的懒狗 再懒就无了 D. Alice, Bob and Candies 题意:n个数字,奇数时间从左侧删数字,偶数时间从右侧删数字,每次删的数字之和必须 ...
- Elasticsearch的query phase和fetch phase
对于一次query查询到数据返回到客户端,经历了两个过程 query phase和fetch phase的过程 query phase 查询阶段 fetch phase 获取阶段. 1 qu ...