環境:vs2010
問題:**c++私有繼承在外部的訪問
**:#include
using namespace std;
class a
public:
a() {
a = 0;
cout<
int a;
class b:protected a
public:
b() {
i=1;
cout<
public:
int i;
int main(void){
b b2;
b2.i = 20;
a *pp = &b2;
couta<
return 0;
a *pp = &b2;報錯:// error c2243: 「型別轉換」: 從「b *」到「a *」的轉換存在,但無法訪問
即基類的指標指向派生類可以轉換,但是因為是保護型繼承,所以不能訪問。
這裡把a *pp = &b2;改為a *pp = (a*)&b2; 即把指向派生類的指標強制轉換成基類指標,就可以訪問。
效果如下:
在b類加入以下**:
void setb(int n){
this->a = n;
這樣還可以對基類的a進行修改。
如圖:雖然可以訪問,但把指向派生類的指標強制轉換成基類指標這種方式不推薦使用,因為已經違背了保護型繼承的原則。
注:c++的強制轉換是很強大的,它不做型別上的檢查。
作者 wentasy
繼承的訪問控制 私有繼承
在私有繼承中,派生類以私有方式繼承基類。基類的公有成員和保護成員在派生類中成為私有成員,它們能被派生類的成員函式直接訪問,但不能被類外函式訪問,也不能在類外通過派生類的物件直接訪問。派生類不能直接訪問基類的私有成員,而只能派生類的成員函式中通過基類的公有或保護成員函式間接訪問。在設計基類時,通常都要...
C (私有繼承和保護繼承)
私有繼承和保護繼承 私有繼承 繼承的訪問控制 基類的public和prorected成員 都以private身份出現在派生類中 基類的private成員 不可直接訪問 訪問許可權 派生類中的成員函式 可以直接訪問基類中的public和protected成員,但不能訪問 基類的private成員 通過...
C 公有繼承 私有繼承和保護繼承
在c 中有三種繼承方式 公有繼承 public 私有繼承 private 和保護繼承 protected 1.公有繼承 public 公有繼承 基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類的子類所訪問。2.私有繼承 private ...