問題:類B私有繼承類A,類A有個protected成員,那么在類B的成員函數里是否可以使用類A的protected成員?
可以使用。
估計有的同學說不對吧,類B都私有繼承了類A了,怎么還能訪問類A的protect成員呢?請看下面的例子。在類Pri_derv的f()成員函數里是可以方位父類Base的pub_mem();和prot_mem;的。
class Base{
public:
void pub_mem();
protected:
int prot_mem;
private:
char pri_mem;
};
class Pub_derv : public Base{
int f(){
pub_mem();
return prot_mem;
}
//char g(){return pri_mem;}//error
};
class Pri_derv : private Base{
int f(){
pub_mem();
return prot_mem;
}
};
所以,子類不管是以什么方式繼承父類,父類的public成員和protected成員在子類里永遠都是可以訪問的。
那么,public,protected,private繼承都有什么用途呢?
控制它的子類,或者使用它的類,可以訪問哪些成員變量。
- public繼承:原來父類的public,protected,private成員在子類里保持不變。
- protected繼承:原來父類的public成員在子類里變成protected的了,其余不變,所以,當別的類使用這個子類, 或者另一個類繼承這個子類時候,這個子類的父類的public就不能被訪問了。
- private繼承:原來父類所以成員在子類里都變成private的了,所以,當別的類使用這個子類, 或者另一個類繼承這個子類時候,這個子類的父類的public就不能被訪問了。
類Pri_derv私有繼承Base,所以在Pri_derv的成員方法里是可以訪問Base的public,protected成員的;但是Base的public,protected成員在類Pri_derv里已經是私有的了,所以當Pri_Pri_derv繼承Pri_derv,在Pri_Pri_derv的成員方法里是不能再訪問Base的public,protected成員。
class Base{
public:
void pub_mem();
protected:
int prot_mem;
private:
char pri_mem;
};
class Pub_derv : public Base{
int f(){
pub_mem();
return prot_mem;
}
//char g(){return pri_mem;}//error
};
class Pri_derv : private Base{
int f(){
pub_mem();
return prot_mem;
}
};
class Pub_Pub_derv : public Pub_derv{
int f(){
pub_mem();
return prot_mem;
}
//char g(){return pri_mem;}//error
};
class Pri_Pri_derv : private Pri_derv{
int f(){
pub_mem();//error
return prot_mem;//error
}
};
c/c++ 學習互助QQ群:877684253

本人微信:xiaoshitou5854