私有继承、保护继承、公共继承之间的区别(代码形式)
1 // Inheritance.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 7 using namespace std; 8 9 class Parent 10 { 11 public: 12 Parent(int var = 1) 13 { 14 pub = var; 15 ptd = var; 16 prt = var; 17 } 18 public: 19 int pub; 20 protected: 21 int ptd; 22 private: 23 int prt; 24 }; 25 class child1:public Parent 26 { 27 public: 28 int getPub() 29 { 30 return pub; 31 } 32 int getPtd() 33 { 34 return ptd; 35 } 36 /* //错误。不管什么继承,子类不能访问父类的private成员变量,但可以访问protected和public成员变量。 37 int getPrt() 38 { 39 return prt; 40 } 41 */ 42 }; 43 class child2:protected Parent 44 { 45 public: 46 int getPub() 47 { 48 return pub; 49 } 50 int getPtd() 51 { 52 return ptd; 53 } 54 /* //错误。不管什么继承,子类不能访问父类的private成员变量,但可以访问protected和public成员变量。 55 int getPrt() 56 { 57 return prt; 58 } 59 */ 60 }; 61 class child3:private Parent 62 { 63 public: 64 int getPub() 65 { 66 return pub; 67 } 68 int getPtd() 69 { 70 return ptd; 71 } 72 /* //错误。不管什么继承,子类不能访问父类的private成员变量,但可以访问protected和public成员变量。 73 int getPrt() 74 { 75 return prt; 76 } 77 */ 78 }; 79 80 int _tmain(int argc, _TCHAR* argv[]) 81 { 82 83 child1 ch1; 84 child2 ch2; 85 child3 ch3; 86 int var = 0; 87 ch1.pub = var; 88 //ch1.ptd = var; //错误。父类的保护成员变量、私有成员不能够被 89 //var = ch1.ptd; //以任何形式继承的子类的任何对象访问和修改 90 var = ch1.getPtd(); 91 92 //var = ch2.pub; //错误。保护继承将父类的中的public和protected成员都变成子类protected类型的成员变量,而一个类的对象是无法访问 93 //ch2.pub = var; //错误。该类的protected和private成员变量的,所以一个保护继承子类的对象是无法访问和修改父类中public的成员变量的。 94 var = ch2.getPtd(); 95 96 //ch3.Pub() = var;//错误。私有继承将父类中的成员变量全部变成子类中private类型的,此时子类对象当然不能修改和访问这些私有成员变量。 97 var = ch3.getPtd(); 98 99 return 0; 100 }