记录学习,或有不足,欢迎参考
第一题 题干:
有两个类Base1和Base2和它们的共同子类Derived。现在Base1、Base2和main函数的代码已经完成。请根据已有的代码完成类Derived的设计。(只需要提交类Derived的代码)
程序的开始部分如下:
#include <iostream>
using namespace std;
class Base1{
int a;
public:
Base1(int a):a(a){
cout<<"Base1 Constructed "<<a<<endl;
}
void doSomething(){
cout<<"Hi Base1"<<endl;
}
};
class Base2{
int b;
public:
Base2(int b):b(b){
cout<<"Base2 Constructed "<<b<<endl;
}
void doSomething(){
cout<<"Hi Base2"<<endl;
}
};
main函数的代码如下:
int main(){
Derived derived(1,2,3,4,5);
derived.doSomething();
return 0;
}
题解:
//教材p266
class Derived :public Base1, public Base2 {
public:
Derived(int a, int b, int c, int d, int e):Base1(d),Base2(a),b1(c),b2(b){
cout << "Derived Constructed " << e << endl;
Base1::doSomething();
Base2::doSomething();
}
void doSomething(){
cout << "Hi Derived" << endl;
}
private:
Base1 b1;
Base2 b2;
};
第二题 题干:
有两个类A和B和它们的共同子类C。现在A、B和main函数的代码已经完成。请根据已有的代码完成类C的设计。(只需要提交类C的代码)
程序的开始部分如下:#include <iostream>
using namespace std;
class A{
int a;
public:
A(int a):a(a){}
~A(){
cout<<"A Destructed "<<a<<endl;
}
void doSomething(){
cout<<"Hello A"<<endl;
}
};
class B{
int b;
public:
B(int b):b(b){}
~B(){
cout<<"B Destructed "<<b<<endl;
}
void doSomething(){
cout<<"Hello B"<<endl;
}
};
main函数的代码如下:
int main(){
C cc(1,2,3,4,5);
cc.doSomething();
return 0;
}
题解:
//教材p266
class C :public A, public B {
public:
C(int a, int b, int c, int d, int e):A(a),B(b),bb(c),aa(d),cc(e) {
A::doSomething();
B::doSomething();
}
~C() {
cout << "C Destructed " << cc << endl;
}
void doSomething(){
cout << "Hello C" << endl;
}
private:
int cc;
B bb;
A aa;
};
第三题 题干:
题目描述
有两个类Father和Mother和它们的共同子类Son。现在Father、Mother和main函数的代码已经完成。请根据已有的代码完成类Son的设计。(只需要提交类Son的代码)
程序的开始部分如下:
#include <iostream>
using namespace std;
class Father{
int a;
public:
Father(int a):a(a){
cout<<"Father Constructed "<<a<<endl;
}
void doSomething(){
cout<<"Hello Father"<<endl;
}
};
class Mother{
int b;
public:
Mother(int b):b(b){
cout<<"Mother Constructed "<<b<<endl;
}
void doSomething(){
cout<<"Hello Mother"<<endl;
}
};
main函数的代码如下:
int main(){
Son son(1,2,3,4,5);
son.doSomething();
return 0;
}
题解:
//教材p266
class Son :public Mother, public Father {
public:
Son(int a, int b, int c, int d, int e):Mother(a),Father(b),aa(c),bb(d) {
cout << "Son Constructed " << e << endl;
Father::doSomething();
Mother::doSomething();
}
void doSomething(){
cout << "Hello Son" << endl;
}
private:
Father aa;
Mother bb;
};
第四题 题干:
题目描述
已知有Grandson类和main函数如下:
class Grandson:public Son1,public Son2{
string grandsonName;
public:
Grandson(string name1,string name2,string name3,string name4):
Father(name1),Son1(name1,name2),Son2(name1,name3),grandsonName(name4){}
void printGrandsonName(){
cout<<grandsonName<<endl;
}
};
int main(){
string n1,n2,n3,n4;
cin>>n1>>n2>>n3>>n4;
Grandson gson(n1,n2,n3,n4);
gson.printFatherName();
cout<<endl;
gson.Son1::printSonName();
cout<<endl;
gson.Son2::printSonName();
cout<<endl;
gson.printGrandsonName();
return 0;
}
请根据输入输出关系将Grandson类的直接基类和间接基类的定义补充完整。
题解:
#include <iostream>
using namespace std;
//教材p277.生物老师棺材本压不住了
class Father{
string fatherName;
public:
Father(string a):fatherName(a){}
void printFatherName() {
cout << fatherName << endl;
}
};
class Son1:virtual public Father{
string sonName;
public:
Son1(string a,string b) :Father(a),sonName(b) {}
void printSonName() {
printFatherName();
cout << sonName << endl;
}
};
class Son2 :virtual public Father {
string sonName;
public:
Son2(string a, string b) :Father(a), sonName(b) {}
void printSonName() {
printFatherName();
cout << sonName << endl;
}
};
第五题 题干:
题目描述
有三个基类A、B、C以及它们的派生类D。
请根据下面关于D类的代码和main函数的代码,结合输入输出关系,将A、B、C类的代码补充完整:
class D:public A,public B,public C{
int x,a;
public:
D(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8):
A(a1,a6),B(a2,a5),C(a3,a4),x(a7),a(a8){}
int getX()const{
return x;
}
int getA()const{
return a;
}
};
int main(){
int a1,a2,a3,a4,a5,a6,a7,a8;
cin>>a1>>a2>>a3>>a4>>a5>>a6>>a7>>a8;
D d(a1,a2,a3,a4,a5,a6,a7,a8);
cout<<d.getX()<<" "<<d.A::getX()<<" "<<d.B::getX()<<endl;
cout<<d.getY()<<endl;
cout<<d.getA()<<" "<<d.B::getA()<<" "<<d.C::getA()<<endl;
cout<<d.getB()<<endl;
return 0;
}
题解:
#include <iostream>
using namespace std;
class A {
int x, y;
public:
A(int a,int b):x(a),y(b){}
int getX() const { return x; }
int getY() const { return y; }
};
class B {
int x, a;
public:
B(int a, int b) :x(a), a(b) {}
int getX() const { return x; }
int getA() const { return a; }
};
class C {
int a, b;
public:
C(int a,int b):a(a),b(b){}
int getA() const { return a; }
int getB() const { return b; }
};
第六题 题干:
题目描述
假设有如下三个基类的定义:
class Base1{
int a,b,c;
public:
void initBase1(int a,int b,int c){
this->a=a;
this->b=b;
this->c=c;
}
int getA()const{
return a;
}
int getB()const{
return b;
}
protected:
int getC()const{
return c;
}
};
class Base2{
int x,y,z;
public:
void initBase2(int x,int y,int z){
this->x=x;
this->y=y;
this->z=z;
}
int getX()const{
return x;
}
int getY()const{
return y;
}
int getZ()const{
return z;
}
};
class Base3{
protected:
int i,j,k;
void initBase3(int i,int j,int k){
this->i=i;
this->j=j;
this->k=k;
}
private:
int getI()const{
return i;
}
int getJ()const{
return j;
}
int getK()const{
return k;
}
};
并且有派生类的定义的第一行:
class Derived:public Base2,private Base3,protected Base1
main函数已经写好了,请根据基类的定义和main函数的定义,结合输入输出,完成Derived类的定义:
int main(){
int a,b,c;
int x,y,z;
int i,j,k;
cin>>a>>b>>c;
cin>>x>>y>>z;
cin>>i>>j>>k;
Derived d;
d.initBase1(a,b,c);
d.initBase2(x,y,z);
d.initBase3(i,j,k);
cout<<d.getA()<<" "<<d.getB()<<" "<<d.getC()<<endl;
cout<<d.getX()<<" "<<d.getY()<<" "<<d.getZ()<<endl;
cout<<d.getI()<<" "<<d.getJ()<<" "<<d.getK()<<endl;
return 0;
}
题解:
public:
//课本p257-p263
void initBase3(int i, int j, int k) {
Base3::initBase3(i,j,k);
}
int getI()const {
return i;
}
int getJ()const {
return j;
}
int getK()const {
return k;
}
void initBase1(int a, int b, int c) {
Base1::initBase1(a,b,c);
}
int getA()const {
return Base1::getA();
}
int getB()const {
return Base1::getB();
}
int getC()const {
return Base1::getC();;
}
第七题 题干:
题目描述
根据main函数的内容倒推所涉及的几个类之间的关系,并完成这些的类的设计:
int main(){
Base1 b1;
Base2 b2;
Derived1 d1;
Derived2 d2;
Base1 *bp;
bp=&b2;
bp->doSomething(); //(1)
cout<<endl;
bp=&d1;
bp->doSomething(); //(2)
cout<<endl;
bp=&d2;
bp->doSomething(); //(3)
cout<<endl;
Base2 &br=d1;
br.doSomething(); //(4)
cout<<endl;
d1.doSomething(); //(5)
cout<<endl;
d2.doSomething(); //(6)
return 0;
}
题解:
#include <iostream>
using namespace std;
class Base1{
public:
void doSomething() {
cout<<"Hello Base1" << endl;
}
};
class Base2:public Base1{
public:
void doSomething() {
cout << "Hello Base2" << endl;
}
};
class Derived1:public Base2{
public:
void doSomething() {
Base1::doSomething();
Base2::doSomething();
cout << "Hi Derived1" << endl;
}
};
class Derived2 :public Base1{
public:
void doSomething() {
Base1::doSomething();
cout << "Hi Derived2" << endl;
}
};
第八题 题干:
题目描述
有如下三个类的定义:
class GrandFather{
string name;
public:
GrandFather(string name):name(name){
cout<<"GrandFather Constructed,Name:"<<name<<endl;
}
~GrandFather(){
cout<<"GrandFather Destructed,Name:"<<name<<endl;
}
};
class Father:public GrandFather{
string name;
public:
Father(string name1,string name2):name(name1),GrandFather(name2){
cout<<"Father Constructed,Name:"<<name<<endl;
}
~Father(){
cout<<"Father Destructed,Name:"<<name<<endl;
}
};
class Mother{
string name;
public:
Mother(string name):name(name){
cout<<"Mother Constructed,Name:"<<name<<endl;
}
~Mother(){
cout<<"Mother Destructed,Name:"<<name<<endl;
}
};
现在在它们的基础上,定义派生类Son。
请根据main函数的内容,结合输入输出,对Son类进行设计:
int main(){
string name1,name2,name3,name4;
cin>>name1>>name2>>name3>>name4;
Son son(name1,name2,name3,name4);
return 0;
}
题解:
//教材p266
class Son :public Mother,public Father {
public:
Son(string a,string b,string c,string d) :Mother(c), Father(d,b),name(a) {
cout << "Son Constructed,Name:" << name << endl;
}
~Son() {
cout << "Son Destructed,Name:" << name << endl;
}
private:
string name;
};
第九题 题干:
题目描述
有如下三个类的定义:
class Base1{
int id;
public:
Base1(int id):id(id){
cout<<"Base1 Constructed,ID:"<<id<<endl;
}
~Base1(){
cout<<"Base1 Destructed,ID:"<<id<<endl;
}
};
class Base2{
int id;
public:
Base2(int id):id(id){
cout<<"Base2 Constructed,ID:"<<id<<endl;
}
~Base2(){
cout<<"Base2 Destructed,ID:"<<id<<endl;
}
};
class Base3{
int id;
public:
Base3(int id):id(id){
cout<<"Base3 Constructed,ID:"<<id<<endl;
}
~Base3(){
cout<<"Base3 Destructed,ID:"<<id<<endl;
}
};
现在要在这三个类的基础上,定义派生类Derived。
请根据main函数的内容,结合输入输出,给出Derived类的完整定义。
int main(){
int id1,id2,id3,id4,id5,id6,id7;
cin>>id1>>id2>>id3>>id4>>id5>>id6>>id7;
Derived d(id1,id2,id3,id4,id5,id6,id7);
return 0;
}
题解:
//教材p266
class Derived :public Base3,public Base1, public Base2 {
public:
Derived(int a, int b, int c, int d, int e, int f, int g) :Base3(f), Base1(d), Base2(e), b2(b) , b1(a),b3(c),dd(g) {
cout << "Derived Constructed,ID:" << g << endl;
}
~Derived() {
cout << "Derived Destructed,ID:" << dd << endl;
}
private:
int dd;
Base2 b2;
Base1 b1;
Base3 b3;
};