protect 继承_(转)public、protect、private继承方式 C++
C里面的结构体内的成员不受任何机制保护,直接能用,比如StructtypeA.x;StructtypeA.y;StructtypeA.fun();
而c++则不同,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)
protect 继承_(转)public、protect、private继承方式 C++相关推荐
- C++ (public, protected, private继承)
http://thinkinginmylife.spaces.live.com/blog/cns!E44140D5E07BEC07!137.entry 我转~~~C++5(public, protec ...
- java 的继承_关于java中的继承
我们都知道Java中的继承是复用代码.扩展子类的一种方式,继承使得Java中重复的代码能够被提取出来供子类共用,对于Java程序的性能以及修改和扩展有很大的意义,所以这是一个非常重要的知识点. 那么对 ...
- c ++ 继承_了解C ++中的继承概念
c ++ 继承 Hi! This time we are here with the topic – Inheritance in C++. 嗨! 这次我们将讨论主题– C ++中的继承 . As w ...
- python类方法继承_对python中类的继承与方法重写介绍
1.单继承 父类也叫基类 子类也叫派生类 如下所示,继承的关系: 继承的书写格式: class 子类(父类): 方法 实例: class Animal: def eat(self): print(&q ...
- C++_类和对象_C++继承_菱形继承_或钻石继承_问题及利用虚继承解决该问题---C++语言工作笔记068
然后我们再来看一下在c++继承中的,一个很好玩的内容, 菱形继承,又叫 钻石继承. 比如我们有个动物类,然后 羊继承了这个动物类,然后驼也继承了这个动物类, 然后,羊驼,通过多继承,继承了羊类和驼类, ...
- C++ 中的三种继承public , protected, private
三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员函数访问 三种继承方式 public 继承 protect 继承 p ...
- C++中的三种继承public,protected,private详细解析
我们已经知道,在基类以private方式被继承时,其public和protected成员在子类中变为private成员.然而某些情况下,需要在子类中将一个或多个继承的成员恢复其在基类中的访问权限 三种 ...
- C++类的继承与多重继承的访问控制【protected,private继承方式】
在前面的练习中我们一直在使用public的继承方式,即共有继承方式,对于protected和private继承方式,即保护继承与私有继承方式我们并没有讨论. 对于单个类来说,讨论保护继承与私有继承的区 ...
- C++ 类访问控制(public/protected/private)小结
第一:private, public, protected 访问标号的访问范围. private:只能由1.该类中的函数.2.其友元函数访问. 不能被任何其他访问,该类的对象也不能访问. protec ...
最新文章
- Spring Cloud Zuul
- hdu2041java
- html:web前端开发规范
- IT众包Web网站服务案例:江苏保税店
- mybatis查询返回null解决方案
- 38张技术知识图谱,IT架构师必备【附下载】
- ASP.NET 主题和外观
- JAVA菜鸟入门(8) Java的Final关键字
- MPLAB PICKIT3、MPLAB SIM调试
- linux裁剪视频教程,适用于Linux桌面的超简单实用的视频裁剪应用
- 古籍拆字 - 批量拆字成图 - js拆字 - js拆图 - js拆古籍 -导出svg矢量图
- 基于WIFI-Pumpkin的流氓AP的实现
- Java代码安装maven jar_Java中Maven项目导出jar包配置的示例代码
- 根据userAgent获取浏览器/操作系统/设备类型等信息
- Clock skew too great(37)-PREAUTH_FAILED
- 为了做好精益化,精益达选择了它?(MES应用案例)
- 关于时间转换总是显示1970年的问题
- Lytro光场相机上手视频
- 2022年吃瓜事件拆解,打造爆款,让你拥有顶级营销思维!
- Python的print无法输入中文问题