问答题使用VC6打开考生文件夹下的源程序文件modi3.cpp。请完成以下部分,实现在屏幕上输出为:  TestClass3  TestClass2  这个程序需要修改的部分,请按照以下部分实现。  1.类TestClass0不能被实例化,请定义一个纯虚函数print,在注释//********1********后添加适当的语句。  2.类TestClass1私有虚继承类TestClass0,请在注释//********2********后添加适当的语句。  3.类TestClass2公有继承类TestC

题目
问答题
使用VC6打开考生文件夹下的源程序文件modi3.cpp。请完成以下部分,实现在屏幕上输出为:  TestClass3  TestClass2  这个程序需要修改的部分,请按照以下部分实现。  1.类TestClass0不能被实例化,请定义一个纯虚函数print,在注释//********1********后添加适当的语句。  2.类TestClass1私有虚继承类TestClass0,请在注释//********2********后添加适当的语句。  3.类TestClass2公有继承类TestClass0,请在注释//********3********后添加适当的语句。  4.类TestClass3公有继承类TestClass2与TestClass1,请在注释//********3********后添加适当的语句。  注意:仅在函数指定位置添加语句,请勿改动主函数main与其他函数中的任何内容。
参考答案和解析
正确答案: 1.添加语句:virtual void print()=0;
2.将“class TestClass1:”补充完整为:class TestClass1:virtual private TestClass0
3.将“class TestClass2:”补充完整为:class TestClass2:public TestClass0
4.将“class TestClass3:”补充完整为:class TestClass3:public TestClass2,public TestClass1
解析:1.题目1要求“请定义一个纯虚函数print”。在C++中,虚函数是指基类中用virtual声明的成员函数。纯虚函数是在声明虚函数时被“初始化”为0的函数,即“virtual void print()=0;”。
2.题目2要求“类TestClass1私有虚继承类TestClass0”。在C++中声明一个派生类时将基类的继承方式指定为private的,称为私有继承。声明TestClass1虚继承类TestClass0,继承方式为私有,因此需加上关键字private,即“class TestClass1:virtual private TestClass0”。
3.题目3要求“类TestClass2公有继承类TestClass0”。在定义一个派生类时将基类的继承方式指定为public的,称为公有继承。基类前面加上关键字public,即“class TestClass2: public TestClass0”。
4.题目4要求“类TestClass3公有继承类TestClass2与TestClass1”。补全“class TestClass3: public TestClass2,public TestClass1”,派生类所继承的两个基类之间用逗号隔开。
解析: 暂无解析
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

使用VC++6.0打开考生文件夹下的源程序文件3.cpp。其中定义的类并不完整,按要求完成下列操作,将类 的定义补充完整,使得程序的输出结果为21。 (1)增加静态私有变量Num,类型为int,请在注释1后添加适当的语句。 (2)增加静态变量Num并初始化为10,请在注释2后添加适当的语句。 (3)完成静态函数get的定义,请在注释3后添加适当的语句。 (4)完成对象obj对静态函数get的调用,使得输出结果 为21,请在注释4后添加适当的语句。 注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。 试题程序: include<iostream.h> classTC { //********1******** intOwn; public: TC(inti) { wn=i; } //********2******** { returnNum+obj->Own; } }; //********3******** intmain() { TCobj(11); //********4******** cout<<<<endl: return0; }


正确答案:
(1)应添加“staticintNum;”。
(2)应添加“intTC::Num=10;”。
(3)应添加“staticintget(TC*obj)”。
(4)将“cout<<<<endl;”补充完整为“cout<<obj.get(&obi)<<endl;”。
【解析】第1处要求“增加静态私有变量Num,类型为int”。静态变量的定义格式为static类型变量名称,本题只要在类的private区域定义int型的静态变量Num,即在第1处添加“staticintNum;”。第2处要求“增加静态变量Num并初始化为10”。第2个标识的位置在类TC的外部,在C++中,使用“::”作用域运算符声明定义的变量属于哪个类。由题干知道,Num属于类TC,根据C++的作用域运算符,在第2处添加语句“intTC::Num=10;”。第3处要求“完成静态函数9et的定义”。根据第3个标识下的“re-turnNum+obj->Own;”语句知道,get函数具有形参obj指针。obj调用Own变量,说明它是TC类型,并且静态函数的定义只要在其前面声明static就可以了,即在第3处添
加语句“staticintget(TC*obj)”。第4处要求“完成对象obj对静态函数get进行调用,使得输出21到屏幕上”。程序中第4处的“cout<<<<endl;”语句缺少输出值,题目中要求对象对静态函数get进行调用,对象对成员函数的调用格式为:对象名.成员函数,即“cout<<obj.get(&obj)<<endl;”。

第2题:

使用VC++6.0打开考生文件夹下的源程序文件3.cpp,其中定义了类A、A1和A2,其中A1类由A类公有派生,A2类由A1类公有派生。 (1)定义类A的构造函数,该构造函数有一个整型的参数x,在构造函数中请将x赋值给数据成员a。请在注释“//********1********”之后添加适当的语句。 (2)定义类A1的构造函数,该构造函数有两个整型的参数x和y,在构造函数中请将x赋值给数据成员b,将y作为基类A构造函数的参数值传人。请在注释“//********2********”之后添加适当的语句。 (3)定义类A2的构造函数,该构造函数有3个整型的参数x,y和z,在构造函数中请将x赋值给数据成员C,将y和z分别赋值给基类A1构造函数的参数x和y。请在注释“//********3********”之后添加适当的语句。 (4)完成类A2的成员函数show的定义,该函数调用基类成员函数,输出基类数据成员a和b及类A2自身的数据成员C的值,上述3个值在输出时以空格隔开。请在注释“//********4********”之后添加适当的语句。 程序输出结果如下: 7 3 738 注意:除在指定的位置添加语句之外,请不要改动程序的其他部分。 试题程序: include<iostream.h> classA { inta; public: //********1******** intgeta{returna;} }; classA1:publicA { intb; public: //********2******** intgetb{returnb;} }; classA2:publicA1 { intC; public: //****,****3******** voidshow { //********4******** } }; voidmain { A2a(8.3.7): cout<<a.geta<<endl: cout<<a.getb<<endl: a.show; }


正确答案:
(1)“A(intx){a=x;}”。
(2)“A1(intx,inty):A(y){b=x;}”。
(3)“A2(intx,inty,intz):A1(y,z){c=x;}”。
(4)“cout<<geta<<""<<getb<<""<<c<<endl;”。
【解 析】本题第1处要求定义类A的构造函数,该构造函数有一个整型的参数x,在构造函数中请将x赋值给数据成员a,构造函数没有返回值类型,所以应填 “A(intx){a=x;}”。第2处第3处根据继承中对象的初始化语法规则可知。第4处要求调用基类成员函数,由于都是公有继承,ge-ta、 getb都是自身类的公有函数,所以根据继承规则,在对象A2中,依然是公有的可以通过对象A2直接调用。

第3题:

使用VC6打开考生文件夹下的工程test5_3。此工程包含一个源程序文件test5_3.cpp,其中定义了一个类Pn,用于求n!。请按要求完成下列操作,将程序补充完整。

(1)定义私有数据成员value(存放n)和fact(存放n!),它们都是ht型的数据。请在注释“//**1**”之后添加适当的语句。

(2)完成默认构造函数Pn的定义,使Fn对象的数据成员value值为i,fact值为1。请在注释“//**2**”之后添加适当的语句。

(3)完成函数Cal的定义,该函数计算value的阶乘,并将运算结果保存在fact中,要求使用while循环实现。请在注释“//**3**”之后添加适当的语句。

(4)将主函数补充完整,直接调用类的成员函数,在界面上输出value的阶乘值。请在注释“//**4**”之后添加适当的语句。

注意;除在指定位置添加语句之外,请不要改动程序中的其他内容。

源程序文件test5_3.cpp清单如下:

include<iostream.h>

class Fn

{

//**1**

public:

Fn(int i);

void Cal();

void disp();

};

Fn::Fn(int i)

{

//**2**

}

void Fn::Cai()

{

//**3**

fact*=i--;

}

void Fn::disp()

{

cout<<value<<"!="<<fact<<endl;

}

void main()

{

int value;

cout<<"Enter the value:";

cin>>value;

Fn A(value);

//**4**

}


正确答案:(1) int value; int fact; (2) value=i; fact=1; (3) inti=value; while(i>1) (4) A.Cal(); A.disp();
(1) int value; int fact; (2) value=i; fact=1; (3) inti=value; while(i>1) (4) A.Cal(); A.disp(); 解析:主要考查考生对类和对象的综合掌握,该题涉及类的成员对象与成员函数的定义,类成员函数的外部调用等知识点。注意(3)中while语句的使用,当满足括号中表达式的条件时,就一直执行后面或者后面花括号中的语句,

第4题:

使用VC6打开考生文件夹下的工程MyProj6。此工程包含一个源程序文件MyMain6.cpp。在程序中,定义了一个Furniture类,Bed类和Sofa类是在Furniture类的基础上按公有继承的方式产生的派生类,Sleepersofa类是在Bed类和Sofa类的基础上按公有继承的方式产生的派生类。

请按要求完成下列操作,将类Date的定义补充完成:

①Bed类是在Furniture类的基础上按公有继承的方式产生的派生类,为了使程序中的多重继承关系不出现二义性。请在注释“//**1**”之后添加适当的语句。

②Sofa类是在Furniture类的基础上按公有继承的方式产生的派生类,为了使程序中的多重继承关系不出现二义性。请在注释“//**2**”之后添加适当的语句。

③Sleepersofa类是在Bed类和Sofa类的基础上按公有继承的方式产生的派生类。请在注释“//**3**”之后添加适当的语句。

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

源程序文件MyMain6.cpp清单如下;

//MyMain6.cpp

include<iostream>

using namespace std;

class Furniture

{

public:

Furniture(){}

void setweight(int w)

{

weight=w;

}

int getweight()

{

return weight;

}

protected:

int weight;

};

//* *1 * * class Bed definition

{

public:

Bed(){}

void sleep()

{

cout<<"sleeping..."<<end1;

}

};

//* *2* * class Sofa definition

{

public:

Sofa(){}

void watchTV()

{

cout<<"watching TV..."<<end1;

}

};

//* * * 3 * * *

{

public:

Sleepersofa(){}

void Foldout()

{

cout<<"Fold out the sofa".<<endl;

};

int main()

{

Sleepersofa ss;

ss.setweight(20);

cout<<ss.getweight()<<end1;

return 0;

}


正确答案:

第5题:

使用VC6打开考生文件夹下的工程MyProj7。此工程包含一个源程序文件MyMain7.cpp。其中定义了类Sample,但类Sample的定义并不完整。

请按要求完成下列操作,将类Sample的定义补充完成:

①定义私有数据成员n,它是int型的数据。请在注释“//* *1**”之后添加适当的语句。

②完成重载构造函数Sample()的定义,使Sample对象的默认值:n=0。请在注释“//* *2* *”之后添加适当的语句。

③完成成员函数add()的类体内的定义,使成员函数返回的Sample对象的值n为两类Sample对象s1和s2的私有成员n的和。请在注释“//* *3* *”之后添加适当的语句。

④完成成员函数disp()的类外定义,使其以“n=”的格式将Sample对象的值输出到屏幕上。请在注释“* *4* *”之后添加适当的语句。

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

源程序文件MyMain7.cpp清单如下:

//MyMain7.cpp

include<iostream>

using namespace std;

class Sample

{

private:

//* * 1* *

public:

Sample(){}

//* *2* *

Sample add(Sample s1,Sample s2)

{

//* *3* *

}

void disp();

};

void Sample: :disp()

{

//* * 4 * *

}

int main()

{

Sample s1(10),s2(5),s3;

cout<<"s1:";

s1.disp();

cout<<"\n S2:";

s2,disp();

s3.add(s1,S2);

cout<<"\n s3.add(s1,s2)\n s3:";

s3.disp();

return 0;

}


正确答案:

第6题:

使用VC++6.0打开考生文件廷下的源程序文件3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整,使其输出的结果为 TCA TCB TCC (1)完成类B虚继承于A,请在注释1后添加适当的语句。 (2)完成类C虚继承于A,请在注释2后添加适当的语句。 (3)完成类D继承于B,C,请在注释3后添加适当的语句。 (4)函数fun通过调用基类的fun,完成所输出的内容,请在注释4后添加适当的语句。 注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。 试题程序: include<iostream.h> classTCA { public: voidfun { cout<<"TCA"<<endl; } }; //********1********classTCB { public: voidfun { cout<<"TCB"<<endl; } }; //********2********classTCC { public: voidfun { cout<<"TCC"<<endl; } }; //********3********classTCD { public: voidfun { //********4********} }; voidmain { TCDtest; test.fun; return; };


正确答案:
(1)将“classTCB:”补充完整为“classTCB:virtualpub-licTCA”。
(2)将“classTCC:”补充完整为“classTCC:virtualpub-licTCA”。
(3)将“classTCD:”补充完整为“classTCD:publicTCB,publicTCC”。
(4)应添加“TCA::fun;TCB::fun;TCC::fun;”。
【解析】本题中第1处要求“完成类B虚继承于A”。在C++中,声明虚基类的一般形式为:class派生类名:virtual继承方式基类名,由题目知道TCA为基类,TCB为派生类,所以第1处的语句修改为“classTCB:virtualpublicTCA”。根据第2处和第3处的要求将标识2和3下的语句修改为“classTCC:virtualpublicTCA”和“ClaSSTCD:pub-licTCB,publicTCC”。第4处要求“函数fun通过调用基类的fun,完成所输出的内容”。在C++中调用基类的成员函数,要使用作用域限定符“::”,类名A::函数fun,就是调用类A的函数fun,根据题目中的要求补全对类TCA、TCB以及TCC中的fun函数,即“TCA::fun;TCB::fun;TCC::fun;”。

第7题:

使用VC++6.0打开考生文件夹下的源程序文件3.cpp。其中定义的类不完整,按要求完成下列操作,将类的定义补充完整。 (1)定义类的公有数据成员函数N0、Name[32],其中N0是int型的数据,Name[32]为字符型。请在注释1后添加适当的语句。 (2)完成函数Set的定义,分别设置N0和Name的值,请在注释2后添加适当的语句。 (3)完成函数print,请在注释3后添加适当的语句,输出结果如下: N0=12345 Name=HelloWorld! (4)添加默认构造函数,设置N0为0,Name为空,请在注释4后添加适当的语句。 注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。 试题程序: include<iostream.h> classTC { public: //********1******** //********2******** { No=no; for(inti=0;strName[i]!=0;i++) { Name[i]=strName[i]; Name[i+1]=0; } } voidprint() { //********3******** } TC() { //********4********) }; intmain() { TCstu: stu.Set(12345,"HelloWorld!");stu.print(); return0; }


正确答案:
(1)应添加“intNo;charName[32];”。
(2)应添加“voidSet(intno,char*strName)”。
(3)应添加“cout<<"No="<<No<<endl<<"Name="<<Name<<endl;”。
(4)应添加“No=Name[0]=0;”。
【解析】第1处要求“定义类的公有数据成员函数N0、Name[32],其中N0为int型,Name[32]为字符型”。在已有程序中类定义的public区域,定义变量N0,Name[32],即在第1处添加语句“intN0;charName[32];”。第2处要求“完成函数Set的定义,分别设置No和Name的值”。在第2处说明函数Set的语句中,应该包括变量no,strName的定义,然后在函数中将其值赋值给N0。Name,即添加定义语句“voidSet(intno,char*strName)”。第3处要求“完成函数print”,根据输出结果,知道输出的是No和Name的值,所以这里补全“cout<<"No="<<No<<endl<<"Name="<<Name<<endl;”。第4处要求“添加缺省构造函数,设置No为0,Name为空”,即在TC构造函数中补充赋值语句“No=Name[0]=0;”。

第8题:

使用VC6打开考生文件夹下的工程MyProj11。此工程包含一个源程序文件 MyMain11.cpp。程序中定义了3个类A、B和C,但类C的定义并不完整。

请按要求完成下列操作,将类的定义补充完成:

①类C是基类A和B公有派生来的。请在注释“//* *1* *”之后添加适当的语句。

②完成构造函数C(int k)定义,采用初始化列表的方式使基类A私有成员a初始化为k-2,基类B的私有成员b初始化为k+2,类C的私有成员c初始化为k。请在注释“//* *2* *”之后添加适当的语句。

③完成类Derived的成员函数disp()的类体外的定义。函数disp()中要分别显式调用基类A、B的disp()函数,然后要输出私有成员c的值。请在注释“//* *3* *”之后添加适当的语句。

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

源程序文件MyMain11.cpp清单如下;

//MyMain11.cpp

include <iostream>

using namespace std;

class A

{

private:

int a;

public:

A(int i) { a=i;}

void disp()

{

cout<<a<<" , "

}

};

class B

{

private:

int b;

public:

B(int j){ b=j;}

disp ( )

{

cout<<b<<", ";

}

};

//* * *1* * *

{

private:

int c;

public:

//* * *2* * *

void disp();

};

void c::disp()

{

//* * *3* * *

}

int main ( )

{

C obj(10);

obj.disp();

return 0;

}


正确答案:

第9题:

使用VC6打开考生文件夹下的工程test8_3,此工程包含一个源程序文件test8_3.cpp,该文件设计了用于输出乘法九九表的类。请认真阅读已有的代码,按要求完成下列操作,将程序补充完整。

(1)定义类Table的私有数据成员x和y,分别用于表示九九表中的两个乘数(x*y),它们都是int型的数据。请在注释“//**1**”之后添加适当的语句;

(2)完成类Table的成员函数prin()的定义,该函数以“x*y=z”的格式打印出九九表中的一个乘法算式,请使用格式化输出函数prinff实现,在注释“//**2**”之后添加适当的语句;

(3)完成类Table9的成员函数print()的定义,该函数调用基类Table的print()函数,将九九表输出到屏幕,请在注释“//**3**”之后添加适当的语句;

(4)补充主函数,在屏幕上输出九九表,以便测试所定义的类的正确性。请在注释“//**4**”之后添加适当的语句。

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

源程序文件test8_3.cpp清单如下:

include<iostream.h>

include<stdio.h>

class Table

{

//**1**

int z;

public:

void print(int x,int y,int z);

};

void Table::print(int x,int y,int z)

{

//**2**

}

class Table9:public Table

{

public:

void print();

};

void Table9::print()

{

//**3**

int x,y,z;

for (i=1;i<1O;i++)

{

for(j=1;j<i+1;j++)

{

x=i;

y=j;

z=i*j;

Table::print(y,x,z);

}

printf("\n");

}

}

main()

{

//+*4**

return 0;

}


正确答案:(1) int x; int y; (2) printf("%d*%d=%d"xyz); if(z10)printf(""); (3) int ij; (4) Table9 t_9; t_9.print();
(1) int x; int y; (2) printf("%d*%d=%d",x,y,z); if(z10)printf(""); (3) int i,j; (4) Table9 t_9; t_9.print(); 解析:主要考查考生将具体问题抽象为类,将类的定义补充完整,并进行类定义测试的能力。注意(2)中格式化输出函数pnnfl的使用格式,%d代表输出的为整型。

第10题:

使用VC6打开考生文件夹下的工程MyProj13。此工程包含一个源程序文件MyMain12.cpp。程序中定义了两个类Base和Derived,但类的定义并不完整。

请按要求完成下列操作,将类的定义补充完成:

①定义类shapes的保护成员x和y,它们都是整型变量。请在注释“//* *1* *”之后添加适当的语句。

②完成构造函数shapes(int d,int w)定义,使类shapes的保护成员x、y分别初始化为d、w,并分别具有默认值0、0。请在注释“//* *2* *”之后添加适当的语句。

③完成类shapes的成员函数setvalue(int d,int w)的定义,shapes类的数据成员x和y分别被设置成d和w。请在注释“//* *3* *”之后添加适当的语句。

④将类shapes的成员函数void disp()设置成纯虚函数。请在注释“//* *4* *”之后添加适当的语句。

注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。

源程序文件MyMain13.cpp清单如下:

//MyMain13.cpp

include<iostream>

using namespace std;

class shapes

{

//* * *1* * *

public:

//* * *2* * *

void setvalue(int d,int w)

{

//* * *3* * *

}

//* * * 4 * * *

};

class square : public Shapes

{

public:

void disp()

{

cout<<x*y<<end1;

}

};

int main()

{

shapes*ptr;

square s1;

ptr=&s1;

ptr->setvalue(10,5);

ptr->disp();

return 0;

}


正确答案:

更多相关问题