计算机二级

使用VC6打开考生文件夹下的工程test38_3。此工程包含一个test38_3.cpp,其中定义了类complex,但类的定义并不完整。请按要求完成下列操作,将程序补充完整。(1)添加类complex的无参数的构造函数的定义,将私有成员real和imag都初始化为0。请在注释“//**1**”之后添加适当的语句。(2)添加类complex的带两个参数的重载构造函数,两个参数r和i都是double类型,要求将r赋值给私有成员real, i赋值给私有成员imag,同时允许调用时参数i可是省略,请在注释“//

题目

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

(1)添加类complex的无参数的构造函数的定义,将私有成员real和imag都初始化为0。请在注释“//**1**”之后添加适当的语句。

(2)添加类complex的带两个参数的重载构造函数,两个参数r和i都是double类型,要求将r赋值给私有成员real, i赋值给私有成员imag,同时允许调用时参数i可是省略,请在注释“//**2**”之后添加适当的语句。

(3)完成类complex重载加法函数的定义,该函数直接返回一个类complex的对象,同时把参数对象c的实部real和虚部imag分别与当前对象对应部分分别相加,请在注释“//**3**”之后添加适当的语句。

(4)完成类complex的友元函数print的定义,使其以格式“real+imagi”输出,请在注释“//**4**”之后添加适当的语句。

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

include <iostream.h>

class complex

{

public:

// ** 1 **

// ** 2 **

{

real=r;imag=i;

}

complex operator+(complex & c);

friend void print(complex &c);

private:

double real,imag;

};

complex complex::operator+(complex & c)

{

// ** 3 **

}

// ** 4 **

cout<<c.real<<"+"<<c.imag<<"i"<<endl;

}

void main( )

{

complex c1(2.0,3.0),c2(4.0,-2.0),c3;

c3=c1+c2;

print(c3);

c3=c3+complex(3.5);

print(c3);

}

如果没有搜索结果,请直接 联系老师 获取答案。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

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

}


正确答案:

第2题:

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

}


正确答案:

第3题:

使用VC6打开考生文件夹下的工程RevProj15。此工程包含一个源程序文件RevMain15.cpp,但该程序中类的定义有错误。请改正程序中的错误,使它能得到正确结果。

注意,不要改动主函数,不得删行或增行,也不得更改程序的结构。

源程序文件RevMain15.cpp中的程序清单如下:

//RevMain15.cpp

include<iostream>

using namespace std;

class Sample

{

private:

int x;

static int y;

public:

Sample(int a)

{

x=a;

y+=x;

}

static void print(Sample s)

{

cout<<"x="<<x<<<<",y="<<y<<end1;

}

Sample::y=5;

int main()

{

Sampel s1(10);

Sample s2(15);

Sample::print(s1);

Sample::print(s2);

return 0;

}


正确答案:

第4题:

使用VC6打开考生文件夹下的工程test21_1,此工程包含一个源程序文件test21_1.cpp,但该程序运行有问题,请改正程序中的错误,使程序的输出结果如下:

The grade is 3

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

include<iostream.h>

class student

{

private:

int grade;

public:

/**************** found*******************/

student(int thegra):(thegra){}

~student(){}

int get_grade(){return grade;}

};

void main()

{

int thegra=3;

/**************** found*******************/

student point=new student(thegra);

/**************** found*******************/

cout<<"The grade is"<<point.get_grade()<<endl;

delete point;

}


正确答案:(1)错误:student(int thegra):(thegra){} 正确:student(int thegra):grade(thegra){} (2)错误:student point=new student(thegra) 正确:student*point=new student(thegra); (3)错误:cout"The grade is"point.get_grade()endl; 正确:cout"The grade is"point->get_grade()endl;
(1)错误:student(int thegra):(thegra){} 正确:student(int thegra):grade(thegra){} (2)错误:student point=new student(thegra) 正确:student*point=new student(thegra); (3)错误:cout"The grade is"point.get_grade()endl; 正确:cout"The grade is"point->get_grade()endl; 解析:(1)主要考查考生对于构造函数使用参数列表初始化数据成员的掌握,可以使用参数列表的形式,也可以在函数内部实现,不过参数赋值的双方都必须出现,本题的错误就在于并没有把参数赋值给数据成员;
(2)主要考查考生对于使用指针申请动态空间的方法的理解,new运算符申请的空间返回值为指针类型,指针类型的定义是在变量名前加上“*”;
(3)主要考查考生对于对象指针调用成员函数方法的掌握,必须使用符号“->”,而对象本身使用符号“.”。

第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打开考生文件夹下的工程proj2。此工程包含一个源程序文件main2.cpp,但该程序运行有问题。请改正main函数中的错误。

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

//main2.cpp

include <iostream>

using namespace std;

class MyClass

{

public:

MyClass(int m)

{

member=m;

}

~MyClass() {}

int GetMember()

{

return member;

}

private:

int member;

};

MyClass MakeObject(int m)

{

MyClass *pMyClass=new MyClass(m);

return *pMyClass;

}

int main ( )

{

int x=7;

/************found**************/

MyClass *myObj=MakeObject(x);

/*************found*************/

cout<<"My object has member"<<myObj.GetMember()<<end1;

return 0;

}


正确答案:修改后的主函数为: int main() { int x=7; MyClass *myObj=&MakeObject(x); cout"My object has member"myObj->GetMember()end1; return 0; }
修改后的主函数为: int main() { int x=7; MyClass *myObj=&MakeObject(x); cout"My object has member"myObj->GetMember()end1; return 0; } 解析:本题考核对象指针的应用。程序中出现了2个出错标识符,说明此程序有2处错误。
第1处错误:“MyClass*myObj=MakeObject(x);”。myObj是对象指针,而函数 MakeObject( )的返回值是类MyClass的对象,所以应改为:“MyClass *myObj=&MakeObject(x);”。
第2处错误:“cout"MyObject has member"myObj.GetMember()end1;”。对象指针使用方式有两种:“对象指针名->成员名;”和“(*对象指针名)成员名;”。显然上述语句的对象指针的使用方式是错误的。应改为“cout"My object has member"myObj->GetMember()end1;”,或者“cout"MyObject has member"(*myObj).GetMember()end1;”。

第7题:

使用VC6打开考生文件夹下的工程test2_1,此工程包含一个源程序文件test2_1.cpp,但该程序运行有问题,请改正程序中的错误,使该程序的输出结果如下:

调用基类BASE的构造函数:1

调用基类BASE的构造函数:2

调用派生类A的构造函数:3

调用派生类A的析构函数

调用基类BASE的析构函数

调用基类BASE的析构函数

源程序文什test2_1.cpp清单如下:

include<iostream.h>

class BASE

{

public:

BASE(int i){cout<<"调用基类BASE的构造函数:"<<i<<endl;}

~BASE(){cout<<"调用基类BASE的析构函数"<<endl;)

/***************** found *****************/

}

class A:public BASE

{

public:

/***************** found *****************/

A(int a,int b):i(a),b(b)

{cout<<"调用派生类A的构造函数:"<<a+b<<endl;}

~A(){cout<<"调用派生类A的析构函数"<<endl;)

private:

BASE b;

};

void main()

{

/****************found***************/

BASE obj(1,2);

}


正确答案:(1)错误:类BASE的定义缺少“;” 正确:}; (2)错误:A(int aint b):i(a)b(b) 正确:A(intaintb):BASE(a)b(b) (3)错误:BASE obj(12); 正确:A obj(12);
(1)错误:类BASE的定义缺少“;” 正确:}; (2)错误:A(int a,int b):i(a),b(b) 正确:A(inta,intb):BASE(a),b(b) (3)错误:BASE obj(1,2); 正确:A obj(1,2); 解析:(1)主要考查考生对于类的定义的掌握,类定义结束后大括号外面不能缺少分号;
(2)主要考查考生对于派生类构造函数的掌握,该函数应该实现将参数传递给基类的功能,即派生类的构造函数应使用参数列表的形式将基类的数据成员初始化,初始化的时候直接使用基类的名称(BASE)而不是基类中变量的名称(i);
(3)主要考查考生对于基类和派生类函数调用关系的掌握,要调用派生类的构造函数必须使用派生类的对象,构造函数只有在该类的对象被使用的时候才会被调用。

第8题:

使用VC6打开考生文件夹下的工程test4_1,此工程包含一个源程序文件test4_1.cpp,但该程序在类的定义中存在问题,请改正类定义中的错误,使程序的输出结果如下:

a=3 b=13

a=5 b=13

注意:请勿修改主函数main中的任何内容。

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

include<iostream.h>

class T

{

public:

/*********found***+******/

T(int x){a=x; b+=x;)

/+********found**********/

void display(T c)

{ cout<<"a="<<c.a<<"\t"<<"b="<<c.b<<endl;)

private:

const int a;

static int b;

};

/**********found*********/

int b=5;

void main()

{

T A(3),B(5);

T::display(A);

T::display(B);

}


正确答案:(1)错误:T(int x){a=x;b+=x;) 正确:T(int x):a(x){b+=x;) (2)错误:void display(T c) 正确:static void display(T c) (3)错误:int b=5; 正确:int T::b=5;
(1)错误:T(int x){a=x;b+=x;) 正确:T(int x):a(x){b+=x;) (2)错误:void display(T c) 正确:static void display(T c) (3)错误:int b=5; 正确:int T::b=5; 解析:(1)主要考查考生对常量数据成员初始化方法的掌握,常量数据成员的初始化只能通过构造函数的成员初始化列表进行,常量数据成员使用关键字const修饰;
(2)主要考查考生对静态成员函数的理解,由主函数中的T::display(A)与T::display(B)可知display应定义为静态成员函数,因为调用类的静态成员必须使用作用域“::”符号;
(3)主要考查考生对静态数据成员初始化方法的掌握,由static int b可知b为静态成员数据,其初始化必须在类外使用作用域运算符(::)限定它所属的类。

第9题:

使用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)中使用对象调用类的数据成员用符号“.”。