15.5节练习

练习15.18 假设给定了第543页和第544页的类,同时已知每个对象的类型如注释所示,判断下面的哪些赋值语句是合法的。解释那些不合法的语句为什么不被允许:

#include <iostream>
#include <string>
using namespace std;
class Base {
public:
	void pub_mem();
protected:
	int prot_mem;
private:
	char priv_men;
};
struct Pub_Derv :public Base {
	int f() { return prot_mem; }
};
struct Priv_Derv :private Base {
	int f1() { return prot_mem; }
};
struct Prot_Derv :protected Base {
	int f2() { return prot_mem; }
};

struct Derived_from_Public :public Pub_Derv {
	int use_base() { return prot_mem; }
};
struct Derived_from_Private :public Priv_Derv {
	
};
struct Derived_from_Protected :public Prot_Derv{
	int use_base() { return prot_mem; }
};
int main()
{
	Pub_Derv d1;
	Base *p = &d1;

	Priv_Derv d2;
	p = &d2;       //访问保护(private)禁止从指向派生类的指针转换成指向基类的指针
	
	Prot_Derv d3; 
	p = &d3;         //访问保护(protected) 禁止从指向派生类的指针转换成指向基类的指针

	Derived_from_Public dd1;
	Derived_from_Private dd2;
	//Derived_from_Protected dd3;

	p = &dd1;
	p = &dd2;		//访问保护(private)
	p = &dd3;		//访问保护(protected)	
}

练习15.19 假设543页和544页的每个类都有如下形式的成员函数:

void menfcn(Base &b) { b = *this; }
对于每个类,分别判断上面的函数函数是否合法。

//非法类,Derived_from_Private不能访问私有基类Priv_Derv

struct Derived_from_Private :public Priv_Derv {
	void menfcn(Base &b) { b = *this; }
};

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值