有关C++继承与友元、继承与类型转换详解
实例如下:
#include<iostream>
usingnamespacestd;
classa{
friendclasspal;
private:
	inti;
protected:
	intj;
public:
	intk;
};
classb:publica{
protected:
	intl;
};
classc:protecteda{};
classd:privatea{};
classe:publicb{};
classpal{
public:
	voidf(aa1){
		cout<<a1.i;//正确,友元能访问私有成员
	}
	voidf1(bb1){
		cout<<b1.i;//正确,友元能访问派生类的基类部分
		cout<<b1.l;//出错,pal类不是b的友元
	}
};
classderi_pal:publicpal{
public:
	voidf2(aa1){
		cout<<a.i;//出错,友元不能继承
	}
};
intmain()
{	
	aa1;
	bb1;
	cc1;
	dd1;
	ee1;
	a1=b1;//正确,只有公共继承的派生类才能向基类转换
	a1=e1;//正确
	a1=c1;//出错,只有公共继承的派生类才能向基类转换
	a1=d1;//出错,只有公共继承的派生类才能向基类转换
	system("pause");
	return0;
}
对基类指针进行动态绑定时,派生类必须是public派生而来,否则不能把基类指针绑定到派生类对象上
#include<iostream>
usingnamespacestd;
classa{};
classb:publica{};
classc:protecteda{};
classd:privatea{};
classbb:publicb{};
classcc:publicc{};
classdd:publicd{};
intmain()
{	
	aa1;bb1;cc1;dd1;bbbb1;cccc1;dddd1;
	a*a1=&b1;//ok
	a*a2=&c1;//error
	a*a3=&d1;//error
	a*a4=&bb1;//ok
	a*a5=&cc1;//error
	a*a6=&dd1;//error
	system("pause");
	return0;
}
以上这篇有关C++继承与友元、继承与类型转换详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。