(c++)4.3派生类的访问控制

在派生类中,存在第四种访问权限:不可访问。

4.3.1公有继承

赋值兼容原则:在公有继承情况下,一个派生类的对象可以作为基类的对象使用。
分为以下三种情况:

  • 派生类的对象可以赋给基类的对象
  • 派生类的对象可以初始化基类的引用
DerivedClass d;
BaseClass& br=d;
  • 派生类的对象地址可以赋给基类的指针
DerivedClass d;
BaseClass * pr=&d;
	后两种情况下,通过br或pr只能访问对象d中所继承的基类成员【这是由基类的类定义决定的】

4.3.2私有继承

将继承方式改为私有继承后,movexy()性质发生了改变(从派生类的公有成员变为私有成员),导致c.movexy(7,8)无法被外模块所使用,于是需要在派生类中增加新的外部接口,操作如下:

#include<iostream>
using namespace std;
class Point//定义基类 
{
	public:
		void setxy(int myx,int myy)
		{
			X=myx;
			Y=myy;
		}
		void movexy(int x,int y)
		{
			X+=x;
			Y+=y;
		}
	protected:
		int X,Y;
};
class Circle:private Point//定义派生类,公有继承方式 
{
	public:
		void setr(int myx,int myy,int myr)
		{
			setxy(myx,myy);
			R=myr;
		}
		void movexy(int x,int y)//增加新的外部接口
		{
			Point::movexy(x,y);
		}
		void display();
	protected:
		int R;
};
void Circle::display()
{
	cout<<"The position of center is";
	cout<<"("<<X<<")"<<Y<<")"<<endl;
	cout<<"The radious of Circle is"<<R<<endl;
}
int main()
{
	Circle c;//派生类对象 
	c.setr(4,5,6);//派生类对象访问自己的成员函数
	cout<<"The start data of Circle:"<<endl;
	c.display();
	c.movexy(7,8);
	cout<<"The new data of Circle:"<<endl;
	c.display();
	return 0; 
}

4.3.3保护继承

这也没啥好讲的,给个图记住就成。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值