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++相关推荐

  1. C++ (public, protected, private继承)

    http://thinkinginmylife.spaces.live.com/blog/cns!E44140D5E07BEC07!137.entry 我转~~~C++5(public, protec ...

  2. java 的继承_关于java中的继承

    我们都知道Java中的继承是复用代码.扩展子类的一种方式,继承使得Java中重复的代码能够被提取出来供子类共用,对于Java程序的性能以及修改和扩展有很大的意义,所以这是一个非常重要的知识点. 那么对 ...

  3. c ++ 继承_了解C ++中的继承概念

    c ++ 继承 Hi! This time we are here with the topic – Inheritance in C++. 嗨! 这次我们将讨论主题– C ++中的继承 . As w ...

  4. python类方法继承_对python中类的继承与方法重写介绍

    1.单继承 父类也叫基类 子类也叫派生类 如下所示,继承的关系: 继承的书写格式: class 子类(父类): 方法 实例: class Animal: def eat(self): print(&q ...

  5. C++_类和对象_C++继承_菱形继承_或钻石继承_问题及利用虚继承解决该问题---C++语言工作笔记068

    然后我们再来看一下在c++继承中的,一个很好玩的内容, 菱形继承,又叫 钻石继承. 比如我们有个动物类,然后 羊继承了这个动物类,然后驼也继承了这个动物类, 然后,羊驼,通过多继承,继承了羊类和驼类, ...

  6. C++ 中的三种继承public , protected, private

    三种访问权限 public:可以被任意实体访问 protected:只允许子类及本类的成员函数访问 private:只允许本类的成员函数访问 三种继承方式 public 继承 protect 继承 p ...

  7. C++中的三种继承public,protected,private详细解析

    我们已经知道,在基类以private方式被继承时,其public和protected成员在子类中变为private成员.然而某些情况下,需要在子类中将一个或多个继承的成员恢复其在基类中的访问权限 三种 ...

  8. C++类的继承与多重继承的访问控制【protected,private继承方式】

    在前面的练习中我们一直在使用public的继承方式,即共有继承方式,对于protected和private继承方式,即保护继承与私有继承方式我们并没有讨论. 对于单个类来说,讨论保护继承与私有继承的区 ...

  9. C++ 类访问控制(public/protected/private)小结

    第一:private, public, protected 访问标号的访问范围. private:只能由1.该类中的函数.2.其友元函数访问. 不能被任何其他访问,该类的对象也不能访问. protec ...

最新文章

  1. Spring Cloud Zuul
  2. hdu2041java
  3. html:web前端开发规范
  4. IT众包Web网站服务案例:江苏保税店
  5. mybatis查询返回null解决方案
  6. 38张技术知识图谱,IT架构师必备【附下载】
  7. ASP.NET 主题和外观
  8. JAVA菜鸟入门(8) Java的Final关键字
  9. MPLAB PICKIT3、MPLAB SIM调试
  10. linux裁剪视频教程,适用于Linux桌面的超简单实用的视频裁剪应用
  11. 古籍拆字 - 批量拆字成图 - js拆字 - js拆图 - js拆古籍 -导出svg矢量图
  12. 基于WIFI-Pumpkin的流氓AP的实现
  13. Java代码安装maven jar_Java中Maven项目导出jar包配置的示例代码
  14. 根据userAgent获取浏览器/操作系统/设备类型等信息
  15. Clock skew too great(37)-PREAUTH_FAILED
  16. 为了做好精益化,精益达选择了它?(MES应用案例)
  17. 关于时间转换总是显示1970年的问题
  18. Lytro光场相机上手视频
  19. 2022年吃瓜事件拆解,打造爆款,让你拥有顶级营销思维!
  20. Python的print无法输入中文问题

热门文章

  1. 计算机上的usb设备是什么东西,联接一个USB的线在电脑桌上方便插U盘的东西叫什么?...
  2. 关于form标签,你该知道
  3. 前端基础-HTML的的标签详解
  4. Java基本数据类型的传值
  5. Linux自动化之Cobbler补鞋匠安装
  6. c语言 static的用法
  7. CentOS7搭建lamp环境
  8. python 编码问题之终极解决
  9. 关于autoupgader的狗屎问题
  10. JavaMail中解决中文附件名乱码的问题