保护继承的实现

类的共有成员和保护成员被继承后作为派生的保护成员。类的私有成员在派生成员中不能被直接访问,即派生类的其他成员函数可以直接访问基类的共有成员和保护成员,但是在类外部通过派生类的对象无法访问他们。同样无论是派生类的成员还是通过派生类的对象都无法访问从基类继承的私有成员。

为了进一步说明保护继承和保护成员的访问性,将基类Point的数据成员X,Y的属性使用protected然后又增加一个派生类Cylindder(圆柱体)Cylinder保护继承Circle,程序实现如下:

首先先编写一个基类point,其功能包括:找圆心和圆心的移动。

#include <iostream>

using namespace std;

class Point           //定义一个类 
{
	private:
		int X,Y;      //定义两个私有成员作为圆心 
	public:
		Point(int X = 0,int Y = 0) //构造函数 
		{
			this ->X = X,this ->Y = Y;
		}
		void move(int offX,int offY) //该函数作为圆心的移动 
		{
			X += offX,Y += offY;
		} 
		void ShowXY()
		{
			cout<<"("<<X<<"."<<Y<<")"<<endl;
		}
};

编写完point基类将它保存,因为只有先保存这样在之后编写其他的程序的时候才可以直接调用,这也是节省时间的一个号方法,但一定要保证两个程序的保存路径是一致的不然的话就有可能在第二个程序的头文件中编译器找不到该文件。 

#include "Point.h"

const double PI = 3.14159;//指定数据常量 

class Circle:protected Point      //新定义类的保护继承Point 
{
	protected:
		double radius;          //定义半径为私有成员 
	public:
		Circle(int R,int X,int Y):Point(X,Y)//新的构造函数需要包括所有的量 
		{
			radius = R;
		}
		double area()     //求圆的面积 
		{
			return PI*radius*radius;
		}
		void ShowCircle()  //展示圆的圆心和半径 
		{
			cout<<"Center of circle:";
			ShowXY();
			cout<<"Radius:"<<radius<<endl;
		} 
};

class Cylinder:protected Circle  //新定义类,为保护继承Circle
{
	private:
		double height;        //定义圆柱高为私有成员 
	public:
		Cylinder(int X,int Y,double R,double H):Circle(R,X,Y) //新的构造函数
		{
			height = H;
		} 
		double area()        //求圆柱的表面积
		{
			return 2*Circle::area() + 2*PI*radius*height;
		} 
		double volume()      //求圆柱体积
		{
			return Circle::area()*height; 
		} 
		void ShowCylinder()
		{
			ShowCircle();
			cout<<"Height of cylinder:"<<height<<endl;
		}
}; 

int main()
{
	Cylinder CY(100,200,10,50);
	CY.ShowCylinder();
	cout<<"total area:"<<CY.area()<<endl;
	cout<<"volume:"<<CY.volume();
	
	return 0;
}

在该程序中要注意的是:在基类的公有成员和保护成员在被保护继承之后成为了派生类的保护成员,而私有成员是不变的,因此在派生类中,成员函数不能够直接访问父类的私有成员。

运行结果:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值