1、
#include <iostream> using namespace std; class A { private: int x; protected: int y; public: int z; void setx(int i) { x=i; } int getx() { return x; } }; class B:public A { private: int m; protected: int n; public: int p; void setvalue(int a,int b,int c,int d,int e,int f) { setx(a); y=b; z=c; m=d; n=e; p=f; } void display() { cout<<"x="<<getx()<<endl; // cout<<"x="<<x<<endl;//基类中x为私有变量,派生类中成员函数不能直接访问 cout<<"y="<<y<<endl;//基类中y为保护变量,派生类中成员函数可以直接访问 cout<<"m="<<m<<endl; cout<<"n="<<n<<endl; } }; int main() { B obj; obj.setvalue(1,2,3,4,5,6); obj.display(); //cout<<"y="<<obj.y<<endl;基类中y为保护变量,派生类的对象不能直接访问 cout<<"z="<<obj.z<<endl; cout<<"p="<<obj.p<<endl; return 0; }
2、私有继承
/* #include <iostream> using namespace std; class A { private: int x; protected: int y; public: int z; void setx(int i) { x=i; } int getx() { return x; } }; class B:public A { private: int m; protected: int n; public: int p; void setvalue(int a,int b,int c,int d,int e,int f) { setx(a); y=b; z=c; m=d; n=e; p=f; } void display() { cout<<"x="<<getx()<<endl; // cout<<"x="<<x<<endl;//基类中x为私有变量,派生类中成员函数不能直接访问 cout<<"y="<<y<<endl;//基类中y为保护变量,派生类中成员函数可以直接访问 cout<<"m="<<m<<endl; cout<<"n="<<n<<endl; } }; int main() { B obj; obj.setvalue(1,2,3,4,5,6); obj.display(); //cout<<"y="<<obj.y<<endl;基类中y为保护变量,派生类的对象不能直接访问 cout<<"z="<<obj.z<<endl; cout<<"p="<<obj.p<<endl; return 0; } */ //私有继承基类的protected和public成员在派生类中均为private #include <iostream> using namespace std; class A { private: int x; protected: int y; public: int z; void setx(int i) { x=i; } int getx() { return x; } }; class B:private A { private: int m; protected: int n; public: int p; void setvalue(int a,int b,int c,int d,int e,int f) { setx(a); y=b; z=c; m=d; n=e; p=f; } void display() { cout<<"x="<<getx()<<endl; // cout<<"x="<<x<<endl;//基类中x为私有变量,派生类中成员函数不能直接访问 cout<<"y="<<y<<endl;//基类中y为保护变量,派生类中变为私有变量,派生类中的函数可以直接访问 cout<<"m="<<m<<endl; cout<<"n="<<n<<endl; } }; int main() { B obj; obj.setvalue(1,2,3,4,5,6); obj.display(); //cout<<"y="<<obj.y<<endl; //基类中y为保护变量,派生类的对象不可以直接访问 //cout<<"z="<<obj.z<<endl; //在通过继承变为私有成员,派生类的对象不可以直接访问 cout<<"p="<<obj.p<<endl; return 0; }
3、保护继承
#include <iostream> using namespace std; class pet { public: void speak() { cout<<"How does a pet speak!"<<endl; } }; class cat:public pet { public: void speak() { cout<<"miao!miao!"<<endl; } }; class dog:public pet { public: void speak() { cout<<"wang!wang!"<<endl; } }; int main() { pet *p1,*p2,*p3,obj; dog dog1; cat cat1; obj = dog1;//派生类的对象可以复制给基类对象 obj.speak();//派生类作为基类使用,只能使用基类里成员函数 p1 = &cat1;//派生类的对象的地址可以复制给基类对象指针 p1->speak();//派生类对象作为基类使用,只能使用基类里的成员函数 p1 = &dog1;//派生类的对象的地址可以复制给基类对象指针 p1->speak(); p2 = new cat;//派生类对象作为基类使用,只能使用基类里的成员函数 p2->speak(); p3 = new dog;//派生类的对象的地址可以复制给基类对象指针 p3->speak();//派生类对象作为基类使用,只能使用基类里的成员函数 pet &p4 = cat1;//派生类对象可以初始化基类的引用 p4.speak();//派生类对象作为基类使用,只能使用基类里的成员函数 dog1.speak(); cat1.speak(); return 0; }