public、protect、private继承方式 C++
2015-09-29 09:10
295 查看
public公有继承
protected保护继承
private私有继承
我们知道类的private和protected成员,在类外是不可以使用的.只有public成员可以在类外直接使用.
公有继承时,基类的private成员派生类也不可用,基类的public和protected成员在派生类中可直接使用.继承过来(变成派生类相应的public和protected成员)只有public成员在派生类外可以直接使用.
保护继承时,基类的private成员仍为有私有.基类的public和protected成员变成派生类的protected成员,这时在派生类外也不能直接使用原基类的public成员
私有继承时,基类的private成员仍为有私有.基类的public和protected成员将变成派生类的private成员.
举个例子.
从例子来看,三种继承从派生类内部引用来看好像没有区别,只在类外引用时表现不同.现在还看不出public和protected继承的区别 那再看一个例子.
public、protect、private继承方式 C++
上表是对该文档的总结,即基类中的private在任何情况下子类及子类外均不可用,虽然子类继承了它。其他成员按相应继承方式转化为相应类型的成员,并在子类内可以访问,在子类外是否可用主要取决于继承后成员属性的访问说明符,这和正常的类成员一样。
protected和private的区别:
protected 与private只有在继承是才起到作用.
protect 和privete 主要是描述定义类成员的时候用到,主要作用是对该类的派生类成员调用该类成员的权限问题““`
protect的成员只有派生类和自己能访问。
也就是说,这种成员,对于派生类,相当于public,而对于外部,相当于private。
c++里面的protect和public、private有什么区别?
public修饰的成员变量 在程序的任何地方都可以被访问,就是公共变量的意思,不需要通过成员函数就可以由类的实例直接访问
private修饰的成员变量 只有类内可直接访问,私有的,类的实例要通过成员函数才可以访问,这个可以起到信息隐藏
protected是受保护变量 类内和子类可直接访问,也就是说,基类中有protected成员,子类继承于基类,那么也可以访问基类的protected成员,要是基类是private成员,则对于子类也是隐藏的,不可访问.
转载:http://blog.sina.com.cn/s/blog_aac2c03a01016t6f.html
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 ) { 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)
public、protect、private继承方式 C++
上表是对该文档的总结,即基类中的private在任何情况下子类及子类外均不可用,虽然子类继承了它。其他成员按相应继承方式转化为相应类型的成员,并在子类内可以访问,在子类外是否可用主要取决于继承后成员属性的访问说明符,这和正常的类成员一样。
protected和private的区别:
protected 与private只有在继承是才起到作用.
protect 和privete 主要是描述定义类成员的时候用到,主要作用是对该类的派生类成员调用该类成员的权限问题““`
protect的成员只有派生类和自己能访问。
也就是说,这种成员,对于派生类,相当于public,而对于外部,相当于private。
c++里面的protect和public、private有什么区别?
public修饰的成员变量 在程序的任何地方都可以被访问,就是公共变量的意思,不需要通过成员函数就可以由类的实例直接访问
private修饰的成员变量 只有类内可直接访问,私有的,类的实例要通过成员函数才可以访问,这个可以起到信息隐藏
protected是受保护变量 类内和子类可直接访问,也就是说,基类中有protected成员,子类继承于基类,那么也可以访问基类的protected成员,要是基类是private成员,则对于子类也是隐藏的,不可访问.
转载:http://blog.sina.com.cn/s/blog_aac2c03a01016t6f.html
相关文章推荐
- 那些曾经记得的C++库
- TLD源码理解之TLD.cpp
- C++ Primer 学习笔记_29_STL实践与分析(3) --操作步骤集装箱(下一个)
- C++类的复制构造函数
- C++基础复习题
- C++里long的字节数
- [C++ primer]第2章 变量和基本类型
- C语言中不允许创建临时变量,交换两个数的内容
- effective c++绝不在构造和析构过程中调用virtual函数
- C++类中的main函数
- 转换大小写字母
- 求两个数的最大公约数。
- 将三个数按从大到小输出。
- C语言冒泡排序法分析及代码实现
- 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
- C语言中可变长参数使用
- trace工具,c++/c#/python
- 将数组A中的内容和数组B中的内容进行交换。(数组一样大)
- 【算法C++】烙饼排序
- c语言的按位运算符