C++继承之基类与派生类的转换

基类与派生类之间可以相互转换,具体有以下几种情况:

1,派生类对象可以向基类对象赋值:

A  a1;

B b1;

a1 = b1;

这是把b1中关于类A部分的成员赋给了a1,。

注意只能用派生类对象对基类对象进行赋值,不能反过来。

2,派生类对象可以向基类对象的引用赋值或者初始化:

 A a1;

B b1;

A & r = b1;

或者:

A & r = a1;

r = b1;

注意r 此时并不是b1 的别名,也不是与b1同享同一段存储单元,它只是b1中基类部分的别名。r 与b1具有相同的起始地址。

3,如果函数的参数是基类的对象或者基类的引用,那么相应的实参可用子类对象:

与前相同,输出类B的对象b1 只能输出派生类中基类成员的值。

4,指向基类对象的指针变量可以用来指向派生类对象:

#include<iostream>
using namespace std;  
class Base
{
public :
	Base(int m):a(m){}
	void display()
	{
		cout<<"a="<<a<<endl;
	}
private:
	int a;
};
class Drived:public Base
{
public :
	Drived(int m,int n):Base(m)
	{b = n;}
	void display()
	{
		Base::display();
		cout<<"b="<<b<<endl;
	}
private:
	int b;
};
void main()
{
	Base *pt;
	Drived dri(1,2);
	pt = &dri;
	pt -> display();
}
在派生类中有两个同名的display成员函数,根据同名覆盖的规则,被调用的应该是派生类Drived对象的display函数,但是实际运行结果确是调用了基类的display成员函数,原因在于pt是指向Base类对象的指针变量,即使让它指向了dri,但实际上pt指向的是dri从基类继承的部分,结论如下:

通过指向基类对象的指针,只能访问派生类中的基类成员,而不能访问派生类增加的成员。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值