C++语言程序设计

问答题使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:  1.定义类CPoint的带有两个参数的构造函数,两个变量为x、y都为int型,且缺省值为0。请在注释//********1********料料料后添加适当的语句。  2.完成类CRectangle的构造函数,给point1和point2进行赋值。请在注释//********2********后添加适当的语句。  3.完成类CRectangle的函数GetArea(

题目
问答题
使用VC6打开考生文件夹下的源程序文件modi3.cpp。其中定义的类并不完整,按要求完成下列操作,将类的定义补充完整。完成以下功能:  1.定义类CPoint的带有两个参数的构造函数,两个变量为x、y都为int型,且缺省值为0。请在注释//********1********料料料后添加适当的语句。  2.完成类CRectangle的构造函数,给point1和point2进行赋值。请在注释//********2********后添加适当的语句。  3.完成类CRectangle的函数GetArea(),用来计算矩形面积。请在注释//********3********后添加适当的语句。  4.定义CRectangle类,拥有两个私有对象point1和point2,类型为Point,请在注释//********4********后添加适当的语句。  注意:除在指定位置添加语句之外,请不要改动程序中的其他内容。
如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

使用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;”。

第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打开考生文件夹下的工程test40_3。此工程包含一个test40_3.cpp,其中定义了类CVector,但该类的定义并不完整。请按要求完成下列操作,将程序补充完整。

(1)完成类CVector构造函数的定义,把传入的int型参数a和b分别赋值给类的成员变量x和y。请在注释“//**1**”之后添加适当的语句。

(2)完成类CVector的“+”运算符重载函数的定义,使Cvector类的两个对象相加时可以直接使用符号“+”,并且结果仍然为类Cvector的对象,请在注释“//**2**”之后添加适当的语句。

(3)在主函数中添加适当的语句,把类Cvector的对象a和b相加,并且把结果保存在对象c中,最后以“x,y”的形式输出在屏幕上,请在注释“//**3**”之后添加适当的语句。

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

include <iostream.h>

class CVector

{

public:

int x,y;

CVector () {};

CVector (int,int);

CVector operator + (CVector);

};

CVector::CVector (int a, int b)

{

//**1**

}

CVector CVector::operator+ (CVector param)

{

//**2**

temp.y = y + param.y;

return (temp);

}

int main ()

{

CVector a (3,1);

CVector b (1,2);

CVector c;

//**3**

return 0;

}


正确答案:(1) x=a; y=b; (2) CVector temp; temp.x=x+param.x; (3) c=a+b; toutc.x""c.y;
(1) x=a; y=b; (2) CVector temp; temp.x=x+param.x; (3) c=a+b; toutc.x","c.y; 解析:主要考查考生对于类的数据成员赋值与定义重载为成员函数的运算符函数的掌握,其中(2)就是运算符函数的实现,实际上就是通过已有的函数和符号实现复杂的运算功能,并最终返回该类的对象,注意最后的返回值必须是对象才能满足要求,(4)中使用对象调用类的数据成员用符号“.”。

第4题:

使用VC6打开考生文件夹下的工程test37_3。此工程包含一个test37_3.cpp,其中定义了类Letter和Number以及Grid,其中Grid类由Letter类和Number类public派生,但三个类的定义并不完整。请按要求完成下列操作,将程序补充完整。

(1)添加类Letter的带一个参数c的构造函数,c是char型的数据,默认值为'A',该函数把参数c的值赋给类的保护成员ch,请在注释“//**1**”之后添加适当的语句。

(2)添加类Number的带一个参数n的构造函数,n是int型的数据,默认值为0,该函数把参数n的值赋给类的保护成员num,请在注释“//**2**”之后添加适当的语句。

(3)添加派生类Grid构造函数的定义,传入的参数为char型的c和血型的n,并将其分别赋值给基类的ch和num,请在注释“//**3**”之后添加适当的语句。

(4)完成派生类Grid的友元函数——“<<”运算符重载的定义,使其以格式“[g.ch,g.num]”输出,请在注释“//**4 **”之后添加适当的语句。

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

include<iost ream. h>

class Letter

{

protected:

char ch;

public:

// ** 1 **

};

class Number

{

protected:

int num;

public:

// ** 2 **

};

class Grid : public Letter, public Number

{

public:

// ** 3 **

friend ostream& operator<<(ostream &o,Grid &g);

};

// ** 4 **

{

o << "[" << g.ch << ", "<< g.num << "]";

return o;

}

int main ( )

{

Grid g('C', 3);

cout << "Grid reference: "<< g << end1;

return 0;

}


正确答案:(1) Letter(char c='A'){ch=c;} (2) Number(int n=0){num=n;} (3) Grid(char c='A'int n=0):Letter(c)Number(n){} (4) ostream &operator(ostream &oGrid &g)
(1) Letter(char c='A'){ch=c;} (2) Number(int n=0){num=n;} (3) Grid(char c='A',int n=0):Letter(c),Number(n){} (4) ostream &operator(ostream &o,Grid &g) 解析:主要考查考生对于类和派生类的构造函数的定义以及重载为友元的运算符函-数的定义的掌握,其中(3)使用了参数列表进行变量赋值,这是派生类构造函数中经常使用的,(4)对于友元函数在类体外的定义不需要使用作用域符,而ostream类的对象引用可直接使用原来意义的符号“”进行输出。

第5题:

使用VC6打开考生文件夹下的工程test19_3,此工程包含一个源程序文件test19_3.cpp,其中定义了用于表示向量的类 vector,但类vector的定义并不完整。请按要求完成下列操作,将类vector的定义补充完整。

(1)补充类vector的构造函数,该函数有参数x和y,它们都是int型的数据,默认值都为0。请使用参数列表的形式分别将类的数据成员a和b分别初始化为参数x和y的值。请在注释“//**1**”之后添加适当的语句。

(2)完成类vector的成员函数input(int x,int y)的定义,将int型的参数x和y分别赋值给数据成员a和b,请在注释“//**2**”之后添加适当的语句。

(3)完成类vector的友元函数friend double Multiply (vector &x,vector &y)的定义,先定义double型的临时变量c,然后将参数对象x和对象y的数据成员a与b分别相乘再相加后赋值给c,最后返回c的值,将请在注释“//**3**”之后添加适当的语句。输出结果如下:

(10,20)

(2, 3)

80

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

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

include <iostream.h>

class vector

{

int a;

int b;

public:

//**1**

void input(int x, int y)

{

//**2**

}

void output ()

{

cout<<'('<<a<<','<<b<<")"<<end1;

}

friend double Multiply(vector &x,vector &y);

}

double Multiply (vector &x,vector &y)

{

//**3**

c=x.a*y.a+x.b*y.b;

return c;

}

void main()

{

vector x(10,20),y;

double d;

y.input (2,3);

d=Multiply (x,y);

x. output ( );

y. output ( );

cout<<d<<end1;

}


正确答案:(1) vector(int x=0int y=0):a(x)b(y){} (2) a=x; b=y; (3) double c;
(1) vector(int x=0,int y=0):a(x),b(y){} (2) a=x; b=y; (3) double c; 解析:本题主要考查考生对于类的定义和友元函数定义的理解,请注意(1)中的参数列表形式和(3)中对象访问成员使用“.”操作符。

第6题:

使用VC6打开考生文件夹下的工程test23_3,此工程包含一个源程序文件test23_3.cpp,其中定义了类X和它的友元类Y,但它们的定义并不完整。请按要求完成下列操作,将程序补充完整。

(1)将类X的静态数据成员y初始化为1。请在注释“//**1**”之后添加适当的语句。

(2)完成类Y的构造函数Y(int i,int j)的定义,将参数i赋值给类Y的数据成员,X的对象a中的数据成员x,并且把参数j赋值给类X的数据成员y,请在注释“//**2**”之后添加适当的语句。

(3)完成类Y的成员函数void Display()的定义,将Y的数据成员,X的对象a中的数据成员x和类X的数据成员y按照“x=_,y=_”的形式显示出来(“_”代表一个数字),请在注释“//**3**”之后添加适当的语句。

输出结果如下:

x=5,y=l

x=6,y=9

x=5,y=9

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

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

include<iostream.h>

class X

{

friend class Y;

public:

void Set(int i) {x=i;}

void Display()

{

cout<<"x="<<x<<",";

cout<<"y="<<y<<endl;

}

private:

int x;

static int y;

};

class Y

{

public:

Y(int i, int j)

void Display();

private:

X a;

};

//**1**

Y::Y(int i, int j)

{

//**2**

}

void Y::Display()

{

//**3**

}

void main ( )

{

X b;

b.Set(5);

b.Display();

Y c(6,9);

c.Display();

b.Display();

}


正确答案:(1) int X::y=1; (2) a.x=i; X;;y=j; (3) cout"X="a.x""; cout"y="X::yendl;
(1) int X::y=1; (2) a.x=i; X;;y=j; (3) cout"X="a.x","; cout"y="X::yendl; 解析:本题主要考查考生对于友元类的定义和使用友元类访问的应用,注意(1)中类X的静态成员y应该在类外初始化,而(2)和(3)中对于x和y不同的访问方式就是因为y是静态成员,是类X的所有对象公有的,必须使用作用域符“::”进行访问。

第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题:

使用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;”。

第9题:

使用VC6打开考生文件夹下的工程test42_3。此工程包含—个test42_3.cpp,其中定义了类Cpolygon、COutput和CTriangle,其中CTriangle类由Cpolygon和COutput类public派生,但三个类的定义并不完整。请按要求完成下列操作,将程序补充完整。

(1)定义类CPolygon的保护数据成员width和height,它们都是int型的数据。请在注释“//**1**”之后添加适当的语句。

(2)完成类CPolygon的成员函数set_values(int a,int b),使参数a和b分别赋值给保护数据成员width和height,请在注释“//**2**”之后添加适当的语句。

(3)完成类Coutput的成员函数output(int)的定义,将传入的参数为血型的i输出到屏幕并换行,请在注释“//**3**”之后添加适当的语句。

(4)完成派生类CTriangle的声明,它由Cpolygon和COutput类public派生,请在注释“//**4**”之后添加适当的语句。

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

include <iostream.h>

class CPolygon

{

protected:

// ** 1 **

public:

void set_values(int a, int b)

{

// ** 2 **

}

};

class COutput

{

public:

void output(int i);

};

void COutput::output(int i)

{

// ** 3 **

}

// ** 4 **

{

public:

int area (void)

{

return (width * height / 2);

}

}

int main ()

{

CTriangle trgl;

trgl.set_values (4,5);

trgl.output (trgl.area());

return 0;

}


正确答案:(1) int width height; (2) width=a; height=b; (3) cout i endl; (4) class CTriangle:public CPolygon public Coutput
(1) int width, height; (2) width=a; height=b; (3) cout i endl; (4) class CTriangle:public CPolygon, public Coutput 解析:主要考查考生对于类的定义和派生类声明的掌握,其中(4)中对于多继承的声明按照如下的格式:关键字class派生类名:继承方式继承类名,继承方式继承类名,在多继承中,一定要注意防止程序的二义性,同时要善于利用基类中已经定义的方式,才能达到代码复用的作用。

第10题:

使用VC6打开考生文件夹下的工程test30_3。此工程包含一个test30_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的构造函数,该构造函数有三个整型的参数x,y和2,在构造函数中请将x赋值给数据成员c,将y和z分别赋值给基类A1构造函数的参数x和y。请在注释“//**3**”之后添加适当的语句。

(4)完成类A2的成员函数show的定义,该函数调用基类成员函数,输出基类数据成员a和b及类A2自身的数据成员c的值,上述三个值在输出时以空格隔开。请在注释“//**4**”之后添加适当的语句。

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

程序输出结果如下:

9

6

962

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

include <iostream.h>

class A

{

int a;

public:

//** 1 **

int geta() {return a;}

};

class A1:public A

{

int b;

public:

//** 2 **

int getb() {return b;}

};

class A2:public A1

{

int c;

public:

//** 3 **

void show()

{

//** 4 **

}

};

void main()

{

A2 a(2,6,9);

cout<<a.geta ( ) <<end1;

cout<<a, getb ( ) <<end1;

a. show( );

}


正确答案:(1) A(int x){a=x;} (2) A1(int xint y):A(y){b=x;} (3) A2(int xint yint z):A1(yx){c=x;} (4) coutgeta()" "getb()" "; coutc"\n";
(1) A(int x){a=x;} (2) A1(int x,int y):A(y){b=x;} (3) A2(int x,int y,int z):A1(y,x){c=x;} (4) coutgeta()" "getb()" "; coutc"\n"; 解析:本题主要考查考生对继承和派生的掌握程度,涉及派生类构造函数的定义、基类成员函数的访问等内容。派生类的构造函数的格式请牢记,另外派生类构造函数及析构函数的执行顺序也是需要掌握的。

更多相关问题