贵州大学在线判题系统-面向对象程序设计-第三次在线作业

记录学习,或有不足,欢迎参考

第一题 题干:

有两个类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;
};

  • 15
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值