[cpp]
#include <iostream>
using namespace std;
class Animal
{
protected:
int test;
public:
Animal(){ test = 0; cout << "animal init...\n";}
void eat(){cout << "Animal eat..." << endl;}
};
class Giraffe: private Animal
{
public:
Giraffe(){cout << "giraffe init...\n";}
void StrechNeck(double)
{
eat();
cout << "test: "<<test << endl;
cout << "strech neck \n"<<endl;
}
};
class Cat: public Animal
{
public:
Cat(){cout << "cat init...\n";}
// void eat(){cout << "cat eat ...\n";}
void Meaw(){
eat();
cout << "meaw\n";}
};
void Func(Animal& an)
{
an.eat();
}
int main()
{
Cat dao;
Giraffe gir;
Func(dao);
dao.Meaw();
cout << "==========================\n";
gir.StrechNeck(12);
// Func(gir);
return 0;
}
運行結果:
總結:
1. 不管是私有繼承還是公有繼承都無法訪問父類的私有成員;
2. 公有繼承的子類對象,可以直接訪問父類的protected和public的成員,就如同訪問自己的成員一樣;
3. 私有繼承的子類對象,不能直接訪問父類的任何成員;
4. 私有繼承的子類對象,如果想要訪問父類成員,只能通過子類的成員函數來訪問父類的成員,就如同父類成員函數訪問自己的成員(當然,父類的private成員無法訪問)。
5. 保護繼承與私有繼承類似,繼承之後的類相對於父類是獨立的;其類對象,在公開場合無法使用基類的成員,也只能通過自己的成員函數來訪問父類的protected和public成員。