1.public继承方式下 #include <iostream> using namespace std; class Animal { public: Animal(){} void eat() { cout << "eat/n"; } protected: void play() { cout << "play/n"; } private: void drink() { cout << "drink/n"; } }; class Giraffe: public Animal { public: Giraffe(){} void StrechNeck() { cout << "Strech neck /n"; } void take() { eat(); // ok,公有继承下,基类的公有成员对派生类可见 // drink(); // error,公有继承下,基类的私有成员对派生类不可见,也就是说,派生类不能访问基类私有成员 play(); // ok,公有继承下,基类的保护成员对派生类可见 } }; int main() { Giraffe gir; // 以下三条语句说明基类成员对派生类对象的可见性 gir.eat(); // ok,公有继承下,基类的公有成员对派生类对象可见 // gir.play(); // error,公有继承下,基类的保护成员对派生类对象不可见 // gir.drink(); // error,公有继承下,基类的私有成员对派生类对象不可见 // 下面一条语句说明基类成员对派生类的可见性 // 派生类(即对派生类的成员函数,派生类的友元函数和有元类可见性,和派生类对象无关) gir.take(); gir.StrechNeck(); return 0; } 2.private继承方式下 #include <iostream> using namespace std; class Animal { public: Animal(){} void eat() { cout << "eat/n"; } protected: void play() { cout << "play/n"; } private: void drink() { cout << "drink/n"; } }; class Giraffe: private Animal { public: Giraffe(){} void StrechNeck() { cout << "Strech neck /n"; } void take() { eat(); // ok,私有继承下,基类的公有成员对派生类可见 // drink(); // error,私有继承下,基类的私有成员对派生类不可见,也就是说,派生类不能访问基类私有成员 play(); // ok,私有继承下,基类的保护成员对派生类可见 } }; int main() { Giraffe gir; // 以下三条语句说明基类成员对派生类对象的可见性 // gir.eat(); // error,私有继承下,基类的公有成员对派生类对象不可见 // gir.play(); // error,私有继承下,基类的保护成员对派生类对象不可见 // gir.drink(); // error,私有继承下,基类的私有成员对派生类对象不可见 // 下面一条语句说明基类成员对派生类的可见性 // 派生类(即对派生类的成员函数,派生类的友元函数和有元类可见性,和派生类对象无关) gir.take(); gir.StrechNeck(); return 0; } 3.protected继承方式下 #include <iostream> using namespace std; class Animal { public: Animal(){} void eat() { cout << "eat/n"; } protected: void play() { cout << "play/n"; } private: void drink() { cout << "drink/n"; } }; class Giraffe: protected Animal { public: Giraffe(){} void StrechNeck() { cout << "Strech neck /n"; } void take() { eat(); // ok,保护继承下,基类的公有成员对派生类可见 // drink(); // error,保护继承下,基类的私有成员对派生类不可见,也就是说,派生类不能访问基类私有成员 play(); // ok,保护继承下,基类的保护成员对派生类可见 } }; int main() { Giraffe gir; // 以下三条语句说明基类成员对派生类对象的可见性 // gir.eat(); // error,保护继承下,基类的公有成员对派生类对象不可见 // gir.play(); // error,保护继承下,基类的保护成员对派生类对象不可见 // gir.drink(); // error,保护继承下,基类的私有成员对派生类对象不可见 // 下面一条语句说明基类成员对派生类的可见性 // 派生类(即对派生类的成员函数,派生类的友元函数和有元类可见性,和派生类对象无关) gir.take(); gir.StrechNeck(); return 0; }