c++ 29 继承一

来源:互联网 发布:有什么女装淘宝店铺 编辑:程序博客网 时间:2024/05/06 06:07




简单的一个public继承。

#include <iostream>using namespace std; //代码重用 两个方式//组合、将一个类作为另一个类的对象成员 委托//继承class Base{public:int x_;protected:int y_;private:int z_;};//派生类公有继承基类class PublicInherit:public Base{public:void Test(){x_=10;y_=20;//保护的成员可以在派生类中访问//z_=30;//这行代码编译无法通过,z_是私有成员,在类外部是不能访问的。}private:int a_;};int main(void){Base b;b.x_=30;//b.y_=40;//编译不通过,类外部是不能访问保户的成员的。   return 0;}

代码示例:

#include <iostream>using namespace std; //代码重用 两个方式//组合、将一个类作为另一个类的对象成员 委托//继承class Base{public:int x_;protected:int y_;private:int z_;};//派生类公有继承基类class PublicInherit:public Base{public:void Test(){x_=10;y_=20;//保护的成员可以在派生类中访问  //z_=30;//这行代码编译无法通过,z_是私有成员,在类外部是不能访问的。}private:int a_;};class PrivateInherit:private Base{public:void Test(){    x_=10;y_=20;}};int main(void){Base b;b.x_=30;//b.y_=40;//编译不通过,类外部是不能访问保户的成员的。PrivateInherit p0;//p0.x_;//不可访问私有PublicInherit p1;p1.x_;   return 0;}

对于结构体来说,没有指定继承方式,默认是公有继承,对于类来说,没有指定,默认是私有继承

对基类数据成员的重定义:

#include <iostream>using namespace std;class Base{public:int x_;Base():x_(0){}int GetBaseX() const{return x_;}};//派生类公有继承基类class Derived:public Base{  public:  Derived():x_(0)  {  }  int GetDerivedX() const  {  return x_;  }  int x_;//派生类也定义了x_};int main(void){Derived d;d.x_=10; //这个时候访问的应该是派生类自身的x_  没有重定义的话,改变的就是基类的xcout<<d.GetBaseX()<<endl;//打印结构0cout<<d.GetDerivedX()<<endl;//打印 结构10    return 0;}

对基类成员函数的重定义(访问基类的成员)

#include <iostream>using namespace std;class Base{public:int x_;Base():x_(0){}int GetBaseX() const{return x_;}void Show(){    cout<<"Base ...Show"<<endl;}};//派生类公有继承基类class Derived:public Base{  public:  Derived():x_(0)  {  }  int GetDerivedX() const  {  return x_;  }  int x_;//派生类也定义了x_  void Show(){    cout<<"Derived ...Show"<<endl;}void Show(int n){    cout<<"Derived ...Show"<<n<<endl;}};int main(void){Derived d;d.x_=10; //这个时候访问的应该是派生类自身的x_ d.Base::x_=5; //访问基类的成员cout<<d.GetBaseX()<<endl;//打印结构0cout<<d.GetDerivedX()<<endl;//打印 结构10 d.Show();//没有重定义,调用的是基类 而如果派生类中定义了一个带参数的Show,不能编译通过 d.Base::Show();//访问基类的函数   return 0;}





0 0