protected成员可以认为protected访问标号是private 和public 的混合:1.像private成员一样,protected成员不能被类的用户访问.2.像public成员一样,protected成员可被该类的派生类访问. 此外,protected还有另一个重要性质:派生类只能通过派生类对象访问其基类的protected成员,派生类对其基类类型对象的protected成员没有特殊访问权限.少量的理解: #include “stdafx.h”#include<iostream>using namespace std; class Ctest{public:Ctest(int a=1,int b=2,int c=3):pub(a),pro(b),pri(c){}int pub;void retprotected(){cout<<pro<<endl;}protected:int pro;void prof(){cout<<“CtestProtected fun”<<endl;}private:int pri;}; class TDer: public Ctest{public:TDer(int a=1,int b =2,int c =3,int d =4):Ctest(a,b,c),Tpri(d){//cout<<pri<<endl;//派生类不能访问积累的private对象prof();//派生类可以访问基类的protected} void retprotected2(){//cout<<pri<<endl;//此处不能用,因为不能访问基类的privatecout<<pro<<endl;//派生类可以访问基类的protectedcout<<Tpri<<endl;//访问自身的private}private:int Tpri;}; int _tmain(int argc, _TCHAR* argv[]){ TDer Ttest(11,22,33,44);//cout<<Ttest.pro<<endl;//这里是不可以访问的.和private成员一样,protected成员不能被类的用户访问return 0;} 公用、私有和受保护的集成每个类控制它所定义的成员的访问。派生类可以进一步限制但不能放松对所继承的成员的访问。 无论派生列表中是什么访问标号,所有继承Base的类对Base中的成员具有相同的访问。派生访问标号将控制派生类的用户对从Base继承而来的成员的访问.class Base{public:void basemem();protected:int i;}; struct Public_derived:public Base{int use_base(){return i;}//这里.可以访问基类的protected}; struct Private_derived:private Base{ int use_base(){return i;}//同样,这样也可以访问i}; 如下:Base b;public_derived d1;Private_derived d2;b.basemen();//可以d1.basemem();//可以d2.basemem();//这是错误的,因为Private_derived是私有继承.导致的事Private_derived中的成员private化了