C++中三大繼承方式的運行效果

#include
using namespace std;
class A
{
public:
void inial(){};
int size;
protected:
int val;
private:
int price;
};
class B : public A
{
public:
int ret(const B b1, A a1)
{
int temp = this->val;
temp = val;
temp = b1.val;
temp = size;
//a1.size;//ok
a1.inial();//ok
//temp = a1.val;//error
//temp = price;//error
}
};
class C : protected A
{
public:
void  ret(const C c1,  A a1)
{
int temp = this->val;
temp = val;
temp = c1.val;
temp = size;
inial();
a1.inial();
a1.size;
//temp = a1.val;//error
//temp = price;//error
}
};
class D : private A
{
public:
void ret(const D d, A a)
{
int temp = size;//ok
temp = d.val;//ok
temp = val;//ok
inial();//ok
a.inial();//ok
a.size;//ok
//temp = price;//error
//temp = a.val;//error
//temp = price;//error
}
//int tmp = val;//error
};
int main()
{
B b;
b.inial();
b.size;
//b.price;//error
//b.val;//**********error
C c;
//c.size;//error
//c.inial();//error
D d;
//d.inial();//error
//d.size;//error
//d.val;//error
return 0;
}




總結:
對於基類中的private成員,無論採用什麼方式繼承,這些成員只能被基類的成員和友元訪問;


下面的討論只針對基類中的protected和public成員:


1.採用public方式繼承,則基類中的public成員在派生類中成爲public成員,派生類對象和派生類
裏面當然可以直接訪問它們;基類中的protected成員在派生類中成爲protected成員,但是基類的
protected成員在派生類裏面中只能通過派生類對象訪問,不能通過基類的對象訪問。當然在派生類外
不能通過派生類對象訪問。


2.採用protected方式繼承,則基類的public和protected成員都成爲protected成員,此時基類中的
public成員在派生類類外不能通過派生類對象訪問,在派生類類裏按照派生類的protected成員特性訪問;
基類的protected成員在派生類裏面還是隻能通過派生類對象訪問,不能通過基類的對象訪問。當然在
派生類外不能通過派生類對象訪問。




3.採用private方式繼承,則基類中的public和protected成員都成爲private成員,此時基類中的
public成員被按照派生類的private成員特性進行訪問;基類的protected成員在派生類裏面還是
只能通過派生類對象訪問,不能通過基類的對象訪問。當然在派生類外不能通過派生類對象訪問。























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章