c++ 29 继承一




简单的一个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_  没有重定义的话,改变的就是基类的x
	cout<<d.GetBaseX()<<endl;//打印结构0
	cout<<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;//打印结构0
	cout<<d.GetDerivedX()<<endl;//打印 结构10 
	d.Show();//没有重定义,调用的是基类 而如果派生类中定义了一个带参数的Show,不能编译通过 
	d.Base::Show();//访问基类的函数
   return 0;
}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值