描述
补充下列代码,使得程序的输出为:
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就行了。