c++ - 派生类的继承访问
阿神
阿神 2017-04-17 11:58:01
0
4
746
class A
{
private:
    int age;
};
class B:private A
{
public:
 int Getage() 
 {
    return age;
 }
};
 B b1; 
 cout<< b1.Getage()<<endl; 派生类私有继承基类之后,基类中的所有成员相对于派生类都是私有的,派生类的成员函数无法访问基类中的私有成员,所以return age失败。

class A
{
protected:
 int age;
};
class B:private A
{
public:
 int Getage() 
 {
  return age;
 }
};
 B b1; 
 cout<< b1.Getage()<<endl; 将int age改成protected,继承方式还是private,为什么就可以访问了呢?私有继承基类之后,基类成员在派生类中不都是私有的吗?



阿神
阿神

闭关修行中......

全部回覆(4)
左手右手慢动作

private成員是不能被子類別繼承的,只屬於該類別本身。
protected和public成員才可以被子類別繼承。

Peter_Zhu

試試這個

cppclass A {
public:
    int age;
}

class B: public A {
}

class C: private A {
}

B b;
int ba = b.age;

C c;
int ca = c.age;
伊谢尔伦

你的理解有誤
子類別私有繼承基底類別的protected/public,這個成員會變成子類別的private成員,相當於變成

class B:private A
{
private:
   int age;
public:
 int Getage() 
 {
  return age;
 }
};

自己當然可以存取自己的私有成員了,所以私有繼承的用法就是不僅讓子類別無法繼承自己的private成員(所有類型的繼承都是這樣),而且自己的非private成員,也變成只能繼承一次,防止了多層繼承。

付一張表格
基底類別中 繼承方式 子類別中

public & public繼承 => public

public & protected繼承 => protected

public & private繼承 = > private

protected & public繼承 => protected

protected & protected繼承 => protected

protected & private繼承 = > private

private & public繼承 => 子類別無權存取

private & protected繼承 => 子類別無權存取

private & private繼承 = > 子類別無權存取

Peter_Zhu

C++ primer第五版P543&&P544
衍生存取說明符,也就是私有繼承,共有繼承對衍生類別的成員和友元來說沒什麼影響。
派生存取說明符的目的是控制派生類別使用者對於基類成員的存取權限。 。額 有點抽象化是吧,,沒事,你看下書就知道了。 。哈哈

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板