protect 继承_public、protect、private继承方式 C++
public公有继承
protected保护继承
private私有继承
我们知道类的private和protected成员,在类外是不可以使用的.只有public成员可以在类外直接使用.
公有继承时,基类的private成员派生类也不可用,基类的public和protected成员在派生类中可直接使用.继承过来(变成派生类相应的public和protected成员)只有public成员在派生类外可以直接使用.
保护继承时,基类的private成员仍为有私有.基类的public和protected成员变成派生类的protected成员,这时在派生类外也不能直接使用原基类的public成员
私有继承时,基类的private成员仍为有私有.基类的public和protected成员将变成派生类的private成员.
举个例子.
class A
{
public:
int m_nTelNum;
protected:
int m_nAge;
private:
int m_nMoney;
};
class B : public A
{
void SetTelNum(int
nTelNum)
{ m_nTelNum=nTelNum; }
void SetAge(int nAge)
{ m_nAge=nAge; }
void SetMoney(int nMoney)
{ m_nMoney=nMoney; }
//这里就出现错误,因为基类的private成员不能用.
};
B objB;
//创建B类的对象objB
objB.m_nTelNum=123456;//可以
objB.m_nAge=30;
//错误.
public继承中基类的protected在派生类中是protected
objB.m_nMoney=100;
//更错误,在派生类中都不可以直接使用.在类外就更不能了.
class C : protected A
{
void SetTelNum(int
nTelNum)
{ m_nTelNum=nTelNum; }
void SetAge(int nAge)
{ m_nAge=nAge; }
void SetMoney(int nMoney)
{ m_nMoney=nMoney; }
//这里就出现错误,因为这是基类的private成员不能用.
};
C objC;//创建C类的对象objC
objC.m_nTelNum=123456;//注意这里和public的区别,这里错误,m_nTelNum变成了C类的protected成员
objC.m_nAge=30;//错误.protected继承中基类的protected在派生类中是protected,这与public同相
objC.m_nMoney=100;//更错误,在派生类中都不可以直接使用.在类外就更不能了.
class D : private A
{
void SetTelNum(int
nTelNum)
{ m_nTelNum=nTelNum; }
void SetAge(int nAge)
{ m_nAge=nAge; }
void SetMoney(int nMoney)
{ m_nMoney=nMoney;
//这里就出现错误,因为这是基类的private成员不能用.
} };
D objD;//创建D类的对象
objD
objD.m_nTelNum=123456;//错误,m_nTelNum变成了D类的private成员
objD.m_nAge=30;//错误.private继承中基类的protected在派生类中是private
objD.m_nMoney=100;//更错误,在派生类中都不可以直接使用.在类外就更不能了.
从例子来看,三种继承从派生类内部引用来看好像没有区别,只在类外引用时表现不同.现在还看不出public和protected继承的区别
那再看一个例子.
class E:public B
{
void SetTelNum(int
nTelNum)
{
m_nTelNum=nTelNum;//可以
因为这是B的公有成员
} void SetAge(int nAge)
{ m_nAge=nAge;//可以
因为这是B的保护成员,现成变成E的protected成员
}
void SetMoney(int
nMoney) { m_nMoney=nMoney;//这个肯定不可以! } };
E objE;
objE.m_nTelNum=123456;//可以
//其它的两个就不能用了.
class F:public C
{ void SetTelNum(int
nTelNum)
{
m_nTelNum=nTelNum;//可以
因为这是C的保护成员,这里与public继承已经有区别但还没有表现出来
}
void SetAge(int nAge) {
m_nAge=nAge;//可以
因为这是C的保护成员,现成变成E的protected成员
}
void SetMoney(int nMoney)
{
m_nMoney=nMoney;//这个肯定不可以! } };
F objF;
objF.m_nTel=123456;//错误,因为这是F的保护成员.注意与E类区别
class G : public D
{
void SetTelNum(int
nTelNum)
{
m_nTelNum=nTelNum;//不可以
因为这是D的private成员,注意这里区别
}
void SetAge(int nAge)
{ m_nAge=nAge;//不可以
因为这是D的private成员,注意区别
}
void SetMoney(int nMoney)
上表是对该文档的总结,即基类中的private在任何情况下子类及子类外均不可用,虽然子类继承了它。其他成员按相应继承方式转化为相应类型的成员,并在子类内可以访问,在子类外是否可用主要取决于继承后成员属性的访问说明符,这和正常的类成员一样。
protected和private的区别:
protected 与private只有在继承是才起到作用.
protect 和privete 主要是描述定义类成员的时候用到,主要作用是对该类的派生类成员调用该类成员的权限问题`````
protect的成员只有派生类和自己能访问。
也就是说,这种成员,对于派生类,相当于public,而对于外部,相当于private。
c++里面的protect和public、private有什么区别?
public修饰的成员变量
在程序的任何地方都可以被访问,就是公共变量的意思,不需要通过成员函数就可以由类的实例直接访问
private修饰的成员变量 只有类内可直接访问,私有的,类的实例要通过成员函数才可以访问,这个可以起到信息隐藏
protected是受保护变量
类内和子类可直接访问,也就是说,基类中有protected成员,子类继承于基类,那么也可以访问基类的protected成员,要是基类是private成员,则对于子类也是隐藏的,不可访问
protect 继承_public、protect、private继承方式 C++相关推荐
- protect 继承_C++继承详解:共有(public)继承,私有(private)继承,保护(protected)继承...
公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时, ...
- C++继承详解:共有(public)继承,私有(private)继承,保护(protected)继承
转自:http://www.cnblogs.com/qlwy/archive/2011/08/25/2153584.html C++继承:公有,私有,保护 公有继承(public).私有继承(priv ...
- protect 继承_C++ protected继承和private继承是不是没用的废物?
〇.引言 既然你所统计的项目里出现了 private 继承和 protected 继承,这不正说明确实有他们的用武之地吗? 一.现有项目分析(以 STL 的三大实现为例) 让我们来康康 C++ 代码的 ...
- C++编程进阶6(public继承与组合、private继承、多重继承、处理模板基类内的名称、如何避免模板代码膨胀)
二十一.public继承与组合 public继承是是子类对象is a基类对象的关系,比如QT中的所有组件类都要继承QObject,所以所有的QT组件都是一个QObject. 而组合是has a(包含) ...
- Effective C++条款39:明智而审慎地使用private继承(Use private inheritance judiciously)
Effective C++条款39:明智而审慎地使用private继承(Use private inheritance judiciously) 条款39:明智而审慎地使用private继承 1.pr ...
- protect 继承_c++三种继承方式public,protect,private
三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员函数访问 三种继承方式 public 继承 protect 继承 p ...
- protect 继承_(转)public、protect、private继承方式 C++
C里面的结构体内的成员不受任何机制保护,直接能用,比如StructtypeA.x;StructtypeA.y;StructtypeA.fun(); 而c++则不同,c++的类像强化型的结构体 publ ...
- protect 继承_C++三种继承方式
C++继承的一般语法为: class 派生类名:[继承方式] 基类名{ 派生类新增加的成员 }; 继承方式限定了基类成员在派生类中的访问权限,包括 public(公有的).private(私有的)和 ...
- public protect private继承
引自原来在CGD讨论的几点总结: 1. public继承被称为类型继承(type inheritance).往往反映is-a关系. 2. protected继承基类的所有公有成员都成为派生类的prot ...
最新文章
- ExecuteScalar()如何返回整数
- Spring中Controller和RequestMapping的详解
- rust安装教程linux,如何在 Linux 中安装 Rust 编程语言
- L1-038. 新世界
- EasyUI下拉框级联
- c语言作业重庆科技学院,C语言程序设计学生上机报告-NO3.doc
- 连接access时的REGDB_E_CLASSNOTREG(0x80040154)错误
- 论文查重中需要注意的问题
- 计算机游戏专业宣传语,游戏的广告词_游戏推广广告词
- 拓扑结构计算机网络结构,什么是计算机网络的拓扑结构
- 泰坦尼克号幸存预测项目
- 收藏 | 超全开源数据集,你真的不想要吗?(附链接)
- 新旧《西游记》人物造型大PK (转)
- 国产处理器兆芯可运行Windows,已试制出Intel i5级处理器
- C++在视图中显示缩略图
- 计算机网络基础第5版教案,计算机网络基础 第5章教案
- quill富文本编辑器——修改默认图片、视频上传功能
- 利用Chrome网络请求调试页面跳转问题
- [JAVA实战篇] AES加密的JAVA实现及AES算法讲解
- 贪心算法--电影节(openjudge 4151 )
热门文章
- 【Win10】解决WLAN不见了,只有飞行模式开关,网络适配器只有以太网,无线网卡隐藏了,设备未连接问题
- 计算机音乐谱夜空中最亮的星歌词,夜空中最亮的星歌谱及歌词
- 嵌入式新闻早班车-第14期
- 360与腾讯qq的战争
- 华为设备配置PoE功能
- 默纳克MCB-C2电气图
- 通用 Mapper UUID 简单示例
- 建立student类,在此类中所有数据定义为私有数据变量。并建立一个student对象数组,用附件中的数据进行初始化。计算每个学生三门课程的总分和平均成绩(C++实验)
- Ubuntu手机操作系统稳定版 20131018
- 最大值最小值计算机一级,最小值