虚基类之构造函数填空
试题描述
请仔细阅读,补充下面代码中的空白。
相关阅读
c++|类改错B
c++|继承改错B
c++|典型运算符重载之集合类填空
c++|虚基类之构造函数填空
c++|类静态成员之英雄类
c++|纯虚函数之再谈星际争霸
① //必要的头文件等,可能为多条语句
② //基类A类
{
③ //保护成员
int a;
④ //公有成员
⑤ //带有一个参数a1的构造函数(且参数有默认值10),在初始化列表中使用a1的值初始化数据成员a,函数体内没有语句
};
⑥ //从虚基类A公有派生B类
{
⑦ //保护成员
int b;
⑧ //公有成员
⑨ //带有两个参数a1、b1的构造函数(参数默认值分别为100、20),在初始化列表中调用基类A的构造函数,再将b1的值赋给数据成员b,函数体内没有语句
};
⑩ //从虚基类A公有派生C类
{
⑪ //保护成员
int c;
⑫ //公有成员
⑬ //带有两个参数a1、c1的构造函数(参数默认值分别为1000、30),在初始化列表中调用基类A的构造函数,再将c1的值赋给数据成员c,函数体内没有语句
};
⑭ //类D由B类和C类公有派生
{
⑮ //公有成员
⑯ //带有三个参数a1、b1、c1的构造函数(参数默认值分别为10000、20000、30000),在初始化列表中依次调用基类A、B和C的构造函数,函数体内没有语句
void Show() const //输出数据成员
{
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << c << endl;
}
};
int main()
{
int x, y, z;
cin >> x >> y >> z;
D obj1; //创建派生类D对象obj1
D obj2(x, y, z); //创建派生类D对象obj2
obj1.Show();
obj2.Show();
return 0;
}
注意:1.请务必提交完整的程序代码,不要修改代码框架。2.请不要修改试题描述中的所有标识符,注意大小写敏感。
输入
输入三个正数,相邻项之间以空格隔开。
输出
依据题意输出若干行。
输入示例
1 2 3
输出示例
a=10000
b=20000
c=30000
a=1
b=2
c=3
数据范围
输入为int范围的整数
#include <iostream>
#include <algorithm>
using namespace std;
class A{
protected:
int a;
public:
A(int a1 = 0):a(a1){
}
};
class B: virtual public A{
protected:
int b;
public:
B(int a1 = 100, int b1 = 20):A(a1),b(b1){}
};
class C: virtual public A{
protected:
int c;
public:
C(int a1 = 1000, int c1 = 30):A(a1),c(c1){}
};
class D:public B,public C{
public:
D(int a1 = 10000,int b1 = 20000, int c1 = 30000):A(a1),B(a1,b1),C(a1,c1){}
void Show() const{
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << c << endl;
}
};
int main()
{
int x, y, z;
cin << x << y << z;
D obj1; //创建派生类D对象obj1
D obj2(x, y, z); //创建派生类D对象obj2
obj1.Show();
obj2.Show();
return 0;
}