004:编程填空:MyClass

描述

补充下列代码,使得程序的输出为:
A:3
A:15
B:5
3
15
5

#include <iostream>
using namespace std;
class CMyClassA {
	int val;
public:
	CMyClassA(int);
	void virtual print();
};
CMyClassA::CMyClassA(int arg) {
	val = arg;
	printf("A:%d\n", val);
}
void CMyClassA::print() {
	printf("%d\n", val);
	return;
}
// 在此处补充你的代码
int main(int argc, char** argv) {
	CMyClassA a(3), *ptr;
	CMyClassB b(5);
	ptr = &a; ptr->print();
	a = b;
	a.print();
	ptr = &b; ptr->print();
	return 0;
}

输入

输出

见样例

样例输入

None

样例输出

A:3
A:15
B:5
3
15
5

class CMyClassB : public CMyClassA
{
    int val;

public:
    CMyClassB(int _val) : val(_val), CMyClassA(3 * _val) { printf("B:%d\n", val); }
    void print() { printf("%d\n", val); };
};

 突破口在于a = b; a.print(); 这说明需要让b此时的基类部分的val为5*3。唯一能做到这个操作的只有前面构造派生类对象的时候,因为赋值这一步无法操作a的private成员val。恰好B的构造函数需要指明A的构造方法,因为A已经没有默认构造函数了,因此只要在B构造函数里面用乘3的方法调用A的构造函数初始化A就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值