第十九章 19.2.2节练习

练习19.6

编写一条表达式将Query_base指针动态转换为AndQuery指针(参见15.9.1节,第564页)。分别使用AndQuery的对象以及其他类型的对象测试转换是否有效。打印一条表示类型转换是否成功的信息,确保实际输出的结果与期望一致。

解答:

Query那些类比较麻烦,其实这里也就是要看转换的继承关系,并确定是否能转换成正确的类型。

这里使用了19.2.1中19.3练习的继承体系。

int main(){
	A *pa = new A;
	try{
		auto *pb = dynamic_cast<B*>(pa);
		cout << typeid(pb).name() << endl;
		if (typeid(pb) == typeid(B*)){
			cout << "convert correct" << endl;
		}
	}
	catch (bad_cast& e){
		cout << e.what() << endl;
	}
}


练习19.7

编写与上一个练习类似的转换,这一次将Query_base对象转换为AndQuery的引用。重复上面的测试过程,确保转换能正常工作。

解答:

int main(){
	B &b = B();
	try{
		auto *pb = dynamic_cast<B*>(&b);
		cout << typeid(pb).name() << endl;
		if (typeid(pb) == typeid(B*)){
			cout << "convert correct" << endl;
		}
	}
	catch (bad_cast& e){
		cout << e.what() << endl;
	}
}

练习19.8

编写一条typeid表达式检查两个Query_base对象是否指向同一种类型。在检查该类型是否是AndQuery。

解答:

int main(){
	A a1 = B();
	A a2 = C();
	if (typeid(a1) == typeid(a2)){
		cout << "point same type" << endl;
	}
}
这里只要对象的类型相同,那么他们肯定指向同一种类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值