注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mr.Right

不顾一切的去想,于是我们有了梦想。脚踏实地的去做,于是梦想成了现实。

 
 
 

日志

 
 
关于我

人生一年又一年,只要每年都有所积累,有所成长,都有那么一次自己认为满意的花开时刻就好。即使一时不顺,也要敞开胸怀。生命的荣枯并不是简单的重复,一时的得失不是成败的尺度。花开不是荣耀,而是一个美丽的结束,花谢也不是耻辱,而是一个低调的开始。

网易考拉推荐

C++访问权限public、protected、private详解  

2013-02-18 15:12:11|  分类: 编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

C++访问权限的作用和目的:
  
  1.控制外界是否可访问
   每一个类都能访问自己的成员集合。
   每一个类,可被访问的只有public成员集合。即,不论在什么地方使用该类(或实例化对象)时,只能访问public成员
  
  2.控制子类是否可继承
   继承时,基类的public、protected成员集合扩充到子类的成员集合中。也就是说private字段和private成员函数在子类中都是没有的。
   
  3.过滤子类继承时的权限
   最终权限 = Min(继承权限 ,原权限);
   继承后,成员扩充到子类的成员集合后的最终访问权限的设置。
   以继承时的访问权限控制(public、protected、private)过滤扩充的成员原来的访问权限,作为最终的访问权限。
   此处过滤的规则:取最低的访问权限。

类的继承后方法属性变化,具体情况如下:
private 属性是不能够被继承的,protected继承和private继承能降低访问权限。
使用private继承,父类的protected和public属性在子类中变为private;
使用protected继承,父类的protected和public属性在子类中变为protected;
使用public继承,父类中的protected和public属性不发生改变;
 
如下所示:
                   public:        protected:       private:
public继承          public        protected        不可用
protected继承       protected     protected        不可用
private继承         private       private          不可用

举一个简单的例子说明protected Members

#include <iostream>

using namespace std;

class Base

{

public:

Base(){};

virtual ~Base(){};

protected:

int int_pro;

};

class A : public Base

{

public: // 在子类的public函数中使用从父类继承下来的protected字段和public字段

A(){};

A(int da){int_pro = da;} 

void Change(A &obj){obj.int_pro = 24;} 

void PrintPro(){cout << "The proteted data is " << int_pro <<endl;}

};

int main()

{

A aObj;

A aObj2(5); //通过构造函数使用protected 字段

aObj2.PrintPro();


aObj.Change(aObj2); //普通函数如何使用protected 字段

aObj2.PrintPro();

         //注释1

         //aObj.int_pro = 8;

}



//sample.h

class CSuper

{

public:

int m_public;

protected:

int m_protected;

private:

int m_private;

};


class CSub : public CSuper

{

public:

// 在子类的public函数中使用从父类继承下来的protected字段和public字段

int CallPublic(){ return m_public; } 

int CallProtected(){ return m_protected; }

//不可! private 字段不能被CSub的实例访问!?

//int CallPrivate(){ return m_private; }  //注释掉消除第一个error

int CallPrivateInSub(){return m_privateInCSub;}

private:

int m_privateInCSub = 139;

};


//main.cpp

//#include "sample.h"


int main()

{

CSuper super;

CSub sub;


super.m_public = 100;

// CSuper的类对象不能使用CSuper类中的protected字段

//super.m_protected = 100;   //注释掉消除第2个error

 // CSuper的类对象不能使用CSuper类中的private字段

//super.m_private = 100;   //注释掉消除第3个error


sub.CallPublic(); 

sub.CallProtected();

//sub.CallPrivate(); //注释掉消除第一个error

sub.CallPrivateInSub(); // public函数当然能访问自己类中的私有字段


return 0;

}


  评论这张
 
阅读(1459)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016