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.单表继承 ...
随机推荐
- pssh命令详解
基础命令学习目录首页 原文链接:https://www.cnblogs.com/kevingrace/p/6378719.html pssh提供OpenSSH和相关工具的并行版本.包括pssh,psc ...
- Centos7.2构建Python3.6开发环境
1.安装python3.6 1.这里使用一台全新的腾讯云主机,首先获取linux系统版本信息. [root@VM_46_121_centos ~]# cat /etc/redhat-release C ...
- php 常用英语小汇
bstract抽象的 -挨伯丝拽克特 access存取.访问 -挨克色丝 account账户 -厄靠恩特 action动作 -爱克身 activate激活 -爱克特维特 active活动的 -爱克得 ...
- oracle varchar2改成大字段类型clob,读取大字段内容
http://blog.csdn.net/cai7095576/article/details/23999549
- Notes of Scrum Meeting(2014/11/2)
Notes of Scrum Meeting (2014/11/2) 软件工程项目组Sevens开始项目之后的第一次Scrum Meeting报告 会议时间:2014年11月2日 20:00—20: ...
- My Sql数据库设置环境变量和字符集
一.踩坑背景 之前开发中一直用的是sql server 数据库,最近接到公司一个老的项目,用的my sql数据库做的,功能做了一大部分,现在客户要求对原程序和数据库进行服务器的迁移工作.产品经理给出 ...
- git 的认识
简单说,三个概念:远程仓库.本地仓库.本地工作目录.clone是从远程仓库上down下本地仓库+工作目录:本地仓库就是工作目录里.git这个目录commit是把工作目录的修改提交给本地仓库pull把远 ...
- 第三次作业— C++计算器项目的初始部分
作业题目: C++计算器项目的初始部分 仓库 代码: Scan.h #ifndef SCAN_H #define SCAN_H #include<string> #include<i ...
- Week4-作业1
第四章 这一章主要讲了代码规范.复审和团队合作这两项内容. 在关于代码设计规范方面,书中讲到了关于goto的使用: “函数最好有单一的出口,为了达到这一目的, ...
- Java Head First & 多态
package com.cwcec.tag; class Fruit { } class Apple extends Fruit{} class Animal { public Fruit eat(F ...