第1题:
使用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; }
第2题:
使用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;
}
第3题:
使用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;
}
第4题:
使用VC6打开考生文件夹下的工程test12_3,此工程包含一个test12_3.cpp,其中定义了类Base和类A,类A公有继承 Base,但这两个类的定义都并不完整。请按要求完成下列操作,将程序补充完整。
(1)定义枚举类型变量en,它包含两个枚举符front和back,请在注释“//**1**”之后添加适当的语句。
(2)在类Base中添加常成员虚函数void E()的定义,该函数输出“In Base E!”,请在注释“//**2**”之后添加适当的语句。
(3)在类A中添加常成员虚函数void E()的定义,该函数先调用基类中的虚函数 E()再输出“In AE!”,请在注释“//** 3**”之后添加适当的语句。
(4)完成类A构造函数的定义,请使用参数列表的形式初始化类A的成员,并输出“A constructor.”,请在注释“//** 4**”之后添加适当的语句。
输出结果如下:
Base constructor.
A constructor.
In BaseE!
In AE!
In BaseP!
In A!
1
A destructor.
Base destructor.
注意:除在指定的位置添加语句外,请不要改动程序中的其他语句。
源程序文件test12_3.cpp清单如下:
include<iostream .h>
// ** 1 **
class Base
{
protected:
int b1;
int b2;
public:
Base();
~Base();
int Getb1()const { return b1; }
void Setb1(int x){ b1 = x; }
int Getb2()const { return b2; }
void Setb2(int y) { b2 = y; }
void Print()const {cout<<"In Base P!"<<end1;}
// ** 2 **
};
Base::Base():b1(1),b2(5)
{
cout<<"Base constructor."<<endl;
}
Base::~Base()
{
cout<<"Base destructor."<<endl;
}
class A:public Base
{
protected:
en enA;
public:
A();
~A();
en GetColor()const { return enA; }
void SetColor(en color){ enA = color; }
void InA(){cout<<"In A!"<<endl;}
// ** 3 **
{
Base::E();
cout<<"In AE!"<<endl;
}
};
// ** 4 **
{
cout<<"A constructor."<<endl;
}
A::~A()
{
cout<<"A destructor."<<endl;
}
void main()
{
A a1;
a1.E();
cout<<endl;
a1.Print();
a1.InA();
cout<<a1.Getbl()<<endl;
}
第5题:
使用VC6打开考生文件夹下的工程MyProj15。此工程包含一个源程序文件MyMain15.cpp。程序中定义了3个类A、B和C,但类的定义并不完整。
请按要求完成下列操作,将类的定义补充完成:
①类Inherit是类Base的公有派生类。请在注释“//* *1* *”之后添加适当的语句。
②完成类Inherit成员函数setvalue(int a,int b,int c,int d)的定义,此函数实现的功能是将基类成员x、y、z和派生类的数据成员m的值分别设置成a、b、c和d。请在注释“//* *2* *”之后添加适当的语句。
③完成类Inherit成员函数display()的类体外定义,此函数实现的功能是以“,,,,”的格式将x、y、z和m的值输出到屏幕上。请在注释“//* *3* *”之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件MyMain15.cpp清单如下:
//Mymain15.cpp
include<iostream>
using namespace std;
class Base
{
private:
int x;
protected:
int y;
public:
int z;
void setx(int i)
{
x=i;
}
int getx()const
{
return x;
}
};
//* * *1* * *
{
private:
int m;
public:
void setvalue(int a,int b,int c,int d)
{
//* * *2* * *
}
void display()const;
};
//* * *3* * *
int main()
{
Inherit A;
A.setvalue(1,2,3,4);
A.display();
return 0;
}
第6题:
使用VC6打开考生文件夹下的工程MyProj12。此工程包含一个源程序文件MyMain12.cpp。程序中定义了两个类Base和Derived,但类的定义并不完整。
请按要求完成下列操作,将类的定义补充完成:
①类Derived是基类Base公有派生来的。请在注释“//* *1* *”之后添加适当的语句。
②完成构造函数Derived(int x)定义,采用初始化列表的方式使基类Base私有成员a初始化为x,类Derived的私有成员b初始化为x+1。请在注释“//* *2* *”之后添加适当的语句。
③完成类Derived的成员函数show()的类体外的定义。函数show()中要输出基类数据成员a的值,然后要输出私有成员b的值。请在注释“//* *3* *之后添加适当的语句。
注意;除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件MyMain12.cpp清单如下:
//MyMain12.cpp
include<iostream>
using namespace std;
class Base
{
public:
int a;
Base(int i)
{
a=i;
}
};
//* * * 1 * * *
{
private:
int b;
public:
//* * * 2 * * *
void show();
};
void Derived::show()
{
//* * * 3 * * *
}
int main()
{
Derived d(1);
d.show();
return 0;
}
第7题:
使用VC++6.0打开考生文件夹下的源程序文件3.cpp。请完成以下部分,实现在屏幕上输出为 C3 C2 这个程序需要修改的部分,请按照以下部分实现。 (1)类C0不能被实例化,请定义一个纯虚函数print,在注释1后添加适当的语句。 (2)类C1私有虚继承类C0,请在注释2后添加适当的语句。 (3)类C2公有继承于C0,请在注释3后添加适当的语句。 (4)类c3公有继承于C2与C1,请在注释4后添加适当的语句。 注意:增加代码或者修改代码的位置已经用符号表示出来。请不要修改其他的程序代码。 试题程序: include(iostream.h) classCO { //********1******** }; //********2******** classC1: { public: voidprint { cout<"”C1"<<endl; } }; //********3******** classC2: { public: voidprint { cout<<"C2"<<endl; } }; //********4***x**** classC3: { public: voidprint { cout<<"C3"<<endl; } }; voidmain { C30bj3; C20bj2; obj3.print; obj2.print; return; }
第8题:
使用VC6打开考生文件夹下的工程test16_3,此工程
(1)定义类Cat 的保护数据成员itsAge用于表示年龄,它是int型的数据。请在注释“//**1**”之后添加适当的语句。
(2)定义类Cat的保护数据成员GetAge()的类外定义,返回成员的itsAge值,请在注释“//**2**”之后添加适当的语句。
(3)完成成员函数SetAge(int age)的类外定义,把数据成员itsAge赋值为参数age的值,请在注释“//**3**”之后添加适当的语句。
(4)完成成员函数Meow的类外定义,使其输出字节符串“meow.”到屏幕上。请在注释“**4**”后添加适当的语句。
输出结果如下:
meow.
kitty is a cat who is 5 years old.
meow.
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件testll3.cpp清单如下:
include<iostream.h>
class Cat
{
public:
int GetAge();
void SetAge(int age);
void Meow();
protected:
//**1**
};
int Cat::GetAge()
{
//**2**
}
void Cat::SetAge(int age)
{
//**3**
}
void Cat: :Meow()
{
//**4**
}
void main ( )
{
Cat kitty;
kitty.Meow();
kitty. SetAge(5);
cout<<"kitty is a cat who is ";
cout<<kitty.GetAge();
cout<<" years old.\n";
kitty. Meow();
}
第9题:
第10题:
第11题:
第12题:
第13题:
使用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; }
第14题:
使用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;
}
第15题:
使用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;
}
第16题:
使用VC6打开考生文件夹下的工程MyProj1。此工程包含千个源程序文件 MyMainl.cpp,其中定义了用于表示日期的类Date,但类Date的定义并不完整。请按要求完成下列操作,将类Date的定义补充完成:
①定义私有数据成员year、month和day分别用于表示年、月、日,它们都是int型的数据。请在注释“//**1**”之后添加适当的语句。
②完成默认构造函数Date的定义,使Date对象的默认值为:year=1,month=1, day=1,请在注释“//**2**”之后添加适当的语句。
③完成重载构造函数Date(int y, int m, int d)的定义,把数据成员year、month和day分别初始化为参数y、m和d的值,请在注释“//**3**”之后添加适当的语句。
④完成成员函数print的类外定义,使其以“年-月-日”的格式将Date对象的值输出到屏幕上。请在注释“//**4**”之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件MyMain1.cpp清单如下:
//MyMainl. cpp
include <iostream>
using namespace std;
class Date
{
public:
//* * 2 * *
Date(int y, int m, int d)
{
//* * 3 * *
}
void print() const;
private:
//data member
//* * 1 * *
};
void Date: :print () const
{
//* * 4 * *
}
int main ( )
{
Date national_day(1949,10,1);
national_day.print();
return 0;
}
第17题:
使用VC6打开考生文件夹下的工程MyProj2。此工程包含一个源程序文件 MyMain2.cpp,此程序的运行结果为:
Derive1's Print() Called.
Derive2's Print() called.
其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。
①定义函数Print()为无值型纯虚函数。请在注释“//**1**”之后添加适当的语句。
②建立类Derivel的构造函数,请在注释“//**2**”之后添加适当的语句。
③完成类Derive2成员函数Print()的定义。请在注释“//**3**”之后添加适当的语句。
④定义类Derivel的对象指针d1,类Derive2的对象指针d2。其初始化值分别为1和2。
源程序文件MyMain2.cpp中的程序清单如下:
//MyMain2. cpp
include <iostream>
using namespace std;
class Base
{
public:
Base(int i)
{
b=i;
}
//* * 1 * *
protected:
int b;
};
class Derivel: public Base
{
public:
//* * 2 * *
void print ()
{
cout<<" Derivel's Print() called."<<end1;
}
};
class Derive2 : public Base
{
public:
Derive2(int i) :Base(i) { }
//* * 3 * *
};
void fun (Base *obj)
{
obj->Print ();
}
int main ( )
{
//* * 4 * *
fun (d1);
fun (d2);
return 0;
}
第18题:
使用VC6打开考生文件夹下的工程MyProj10。此工程包含一个源程序文件MyMain10.cpp。程序中定义了两个类Base和Derived,但类的定义并不完整。
请按要求完成下列操作,将类的定义补充完成:
①类Derived是基类Base公有派生来的。请在注释“//* *1* *”之后添加适当的语句。
②完成构造函数Derived(int i)定义,采用初始化列表的方式使基类Base私有成员a初始化为i+1,类Derived的私有成员b初始化为i。请在注释“//* *2* *”之后添加适当的语句。
③完成类Derived的成员函数show()的类体外的定义。函数show()中要显式调用基类的show()函数,然后要输出私有成员b的值。请在注释“//* *3**”之后添加适当的语句。
注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
源程序文件MyMain10.cpp清单如下:
//MyMain10.cpp
include<iostream>
using namespace std;
class Base
{
public:
Base(int x)
{
a=x
}
void show()
{
cout<<a;
}
private:
int a;
};
//* * *1* * *
{
public:
//* * * 2 * * *
void show();
private:
int b;
};
void Derived :: show()
{
//* * * 3 * * *
}
int main()
{
Derived d(1), *pb;
pb=&d;
pb->show();
return 0;
}
第19题:
使用VC++6.0打开考生文件夹下的源程序文件3.cpp。程序通过继承关系,实现对姓名的控制。类TC1实现对名字访问的接口,TC2实现对名字的设置和输出。
程序输出为
TC2Name
May
其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。
(1)在类TCl中定义接口函数GetName为纯虚函数。请在注释1后添加适当的语句。
(2)函数GetName2用于获得名字的缓存,但只获得允许读操作这个缓存,请在注释2后添加适当的语句。
(3)实现TC2的构造函数,请在注释3后添加适当的语句。
(4)完成TC2的构造函数,实现对名字的处理。请在注释4后添加适当的语句。
注意:增加或者修改代码的位置已经用符号表示出来,请不要修改其他的程序代码。
试题程序:
include<iostream.h>
classTC1
{
public:
//********1********
};
classTC2:publicTCl
{
public:
voidGetName
{
cout<<"TC2Name"<<endl;
}
//********2********
{
returnm_str;
}
//********3********
{
inti:
for(i=0;str[i]!=0;i++)
m_str[i]=str[i];
//********4********
}
private:
charm_str[32];
};
voidmain
{
TCl*P;
TC20bj1("May");
p=&objl;
p->GetName;
cout<<obj1.GetNamc2<<endl;
return;
}
(1)应添加“virtualvoidGetNamt!=0;”。
(2)应添加“constchar*GetName2”。
(3)应添加“TC2(char*str)”。
(4)应添加“m_str[i]=0;”。
【解析】本题第1处要求“在类TC1中定义接口函数GetName,为纯虚函数”。在C++中,在基类中用virtual声明成员函数为虚函数。纯虚函数是在声明虚函数时被“初始化”为0的函数,即“virtualvoidGetName=0;”。第2处要求“函数GetName2实现获得名字的缓存,但只获得读允许操作这个缓存”。只能引用数据成员,而不能修改,所以使用常成员函数,其一般形式为“const函数类型函数名”,即“constchar*GetName2”。第3处要求“实现TC2的构造函数”。TC2的构造函数与类TC2的名称应该相同,而且第3处的大括弧中是对字符数组str的操作,所以类TC2的构造函数中的参数为str,即这里补全为“TC2(char*str)”。第4处要求“完成TC2的构造函数,实现对名字的处理”,补全类TC2的构造函数,构造函数中的名字变量str对应于类TC中的成员变量m_str,所以这里补全变量赋值操作“m_str[i]=0;”。
第20题:
第21题:
第22题:
第23题: