C++ public private protect 继承关系(链接)
总结: public继承基类成员访问权限没有变化;
protected继承基类public和protected权限变为protected,基类private不变。
private继承基类public和protected权限变为private,基类private不变,所以,在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承。
(根据派生类继承的方式,可推导派生类向基类转换时用户代码和成员函数和友元函数的可访问性)
1.public继承基类,派生类成员和友元都可以访问,(Base* B=new Diveration)用户代码,相对基类可以看到子类从基类继承的部分有public成员可访问;
2.任何继承方式,派生类成员和友元都可以访问,用户代码根据继承区别;
3.public&protected继承基类,派生类的派生类成员和友元都可以访问,而private继承不可访问(都变成派生类的私有了,不管你派生类的派生类怎么继承都是不可见的)
class Base
{
public:
virtual void Try() const =; int public_int;
protected:
int protected_int;
private:
int private_int;
}; //继承改变的是public&protected
//private属于基类
class DiverA : public Base
{
public: //不管什么继承内部只有基类的public&protected可访问(任何继承public&protected的变化对于派生类都可见)
void Try() const override
{
std::cout << public_int << std::endl;
std::cout << protected_int << std::endl;
//std::cout << private_int << std::endl;
} }; int main(int argc, char *argv[])
{ Base *B = new DiverA;
B->Try();
B->public_int; //相对基类,派生类继承public区对基类可见而protected区和private区相对不可见;
//其他继承可以推导 return ;
}
可以通过using声明改变继承变量的权限(原private除外,虽然继承但是还是属于基类私有)
注意:派生类只能为那些它能访问到的成员提供using
//基类
class Base
{
public:
int public_int;
protected:
int protected_int;
private:
int private_int;
}; //派生类
class DiverA : private Base
{
public:
//通过using改变继承权限,用户代码也改变
using Base::public_int;
using Base::protected_int;
}; //派生类的派生类
class DiverA_Diver : public DiverA
{ }; int main(int argc, char *argv[])
{ //普通代码
DiverA_Diver A;
A.protected_int;
A.public_int; //普通代码
DiverA B;
B.public_int;
B.protected_int; //用户代码(派生类向基类转换,权限改变了)
DiverA *base = new DiverA_Diver;
base->protected_int;
base->public_int; return ;
}
C++ public private protect 继承关系(链接)的更多相关文章
- public private protect
public 公有 使用public意味着声明public之后的成员对每个人都是可用的 private 私有 除非必须公开底层实现细目,否则就应该将所有的域指定为private protect 继 ...
- public private, protect. 以及继承。 草稿。
#include <iostream>#include <thread>#include <memory> // | 父类的public成员 | 父类的protec ...
- Public Private Protect Inheritance and access specifiers
In the previous lessons on inheritance, we've been making all of our data members public in order to ...
- c++三种继承方式public,protect,private
C++中的三种继承public,protected,private 三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员 ...
- public、protect、private在父类子类中使用
先贴出一张,直观的.估计大家都见过的关于public.protect.private的范围图 作用域 当前类 同一package 子孙类 其他package public T ...
- c/c++再学习:C++中public、protect、private的访问权限控制
C++中public.protect.private的访问权限控制 访问权限 一个类的public成员变量.成员函数,可以通过类的成员函数.类的实例变量进行访问 一个类的protected成员变量.成 ...
- c++ 之private /protect/ public
C++中public.protect.private的访问权限控制 访问权限 一个类的public成员变量.成员函数,可以通过类的成员函数.类的实例变量进行访问 一个类的protected成员变量.成 ...
- hibernate映射的 关联关系:有 一对多关联关系,一对一关联关系,多对多关联关系,继承关系
hibernate环境配置:导包.... 单向n-1:单向 n-1 关联只需从 n 的一端可以访问 1 的一端 <many-to-one> 元素来映射组成关系: name: 设定待映射的持 ...
- Hibernate注解方式配置-继承关系
在JPA中,实体继承关系的映射策略共有三种:单表继承策略(table per class).Joined策略(table per subclass)和Table_PER_Class策略. 1.单表继承 ...
随机推荐
- trustbox文件破解
常见的破解方式,是要还原内容的二进制文件,删除加密壳部分的对应二进制数值,然后把剩下的内容保存下来,就实现了破解的任务. 淘宝破解链接:https://item.taobao.com/item.ht ...
- 互评Beta版本——杨老师粉丝群——Pinball
互评beta版本 杨老师粉丝群——<PinBall> 一.基于NABCD评论作品,及改进建议 1.根据(不限于)NABCD评论作品的选题 (1)N(Need,需求) 随着年龄的增长, ...
- Task 4.4二维环形数组求最大子矩阵之和
任务: (1)输入一个二维整形数组,数组里有正数也有负数. (2)二维数组首尾相接,象个一条首尾相接带子一样. (3)数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. (4)求所有子数 ...
- 软工实践-Beta 冲刺 (5/7)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 1.界面的修改与完善 展示GitHub当日代码/文档签入记 ...
- 在onResume()中调用getIntent()得不到Extra的问题
之前 想做activity间的传值,注意 不是 startActivityforResult的那种, 在启动了多层activity再次启动activity想进入到singleTask的MainActi ...
- 在数组中找出两数之和为10的所有组合(JAVA)
/*利用冒泡排序实现*/ import java.util.Scanner;public class Paixun { public static void main(String[] args) { ...
- 《构建之法》第四&十七章读书笔记
<构建之法>第四&十七章读书笔记 一. 前言 再次阅读<构建之法>,愈发被其中生动有趣的举例吸引.作为一本给予软件工程学生的书籍,其不以枯燥的理论知识 ...
- java synchronized关键字浅析
synchronized这个关键字想必学Java的人都应该知道. 直接上例子: 方法级别实例 public class AtomicInteger { private int index; publi ...
- DRBD 实验
跨主机的块设备镜像系统,工作在内核中完成 drbd工作原理:客户端发起一个写操作的系统调用给文件系统,写请求再到达内核缓冲区,最到达DRBD模块,此时drbd会复制写入磁盘的数据,且进行两步操作,第一 ...
- 6/8 sprint2 看板和燃尽图的更新