C++面向对象程序设计模拟试题2

C++面向对象程序设计模拟试题二
一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中,只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1.说明内联函数的关键字是( A )。
A. inline B. virtual C. define D. static
2.假定CAb为一个类,则执行CAb oX;语句时将自动调用该类的(B )
A. 有参构造函数 B. 无参构造函数
C. 拷贝构造函数 D. 赋值重载函数
3.cin是某个类的标准对象的引用,该类是( B )。
A. ostream B. istream C. stdout D. stdin
4.下面的哪个保留字不能作为函数的返回类型?( C )
A. void B. int C. new D. long
@@5.不能参与重载的运算符是( A )。
A. . B. + C. () D. []
6.由于数据隐藏的需要,静态数据成员通常被说明为( A )。
A. 私有的 B. 公有的 C. 保护的 D. 不可访问的
@@7.@@编译时多态性使用什么获得?( A )
A. 重载函数 B. 继承 C. 虚函数 D. B和C
@@8.拷贝构造函数的参数通常是( C )。
A. 无特殊要求 B. 指向对象的指针
C. 本类对象的常引用 D. 对象
@@9.C++有几种联编?( B )
A. 1种 B. 2种 C. 3种 D. 4种
10.基类和派生类可以分别称为( B )。
A. “大类”和“小类” B. “父类”和“子类”
C. “小类”和“大类” D. “子类”和“父类”
二、判断正误题(本大题共6小题,每小题2分,共12分)判断正误,在题后的括号内,正确的划上“√”错误的划上“×”。
@@1.不可以定义抽象类的对象。 ( T )
@@2.内联函数的定义必须出现在第一次调用内联函数之前。 (T )
@@3.模板函数与函数模板的意义完全相同。 ( F )
@@4.只有常成员函数才可以操作常对象。 ( T )
@@5.定义非形参的引用变量可以不初始化。 ( F )
@@6.使用new运算符创建数组时,可以为该数组指定初始值。 ( F )
三、填空题(本大题共6小题,每小题2分,共12分)不写解答过程,将正确的答案写在每小题的空格内。错填或不填均无分。
1.设函数max是由函数模板实现的,并且max(3.5, 5)和max(3, 5)都是正确的函数调用,则此函数模板具有( 2 )个类型参数。
2.在C++中,函数重载与虚函数帮助实现了类的( DT )性。
3.由static修饰的数据成员为该类的所有对象( GONGXIANG )。
4.重载函数一般在参数类型或参数个数上不同,但( HANSHUMING )相同。
5

.使用new建立的动态对象在不用时应该用( DELECE )释放所占用的空间。
6.重载运算符“<<”的函数名为( OPERATOR )。
四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。
1.阅读下面程序,写出输出结果。
#include
using namespace std;

class CPosition
{
public:
CPosition(int iPositionX = 0, int iPositionY = 0):m_iPositionX(iPositionX)
{
m_iPositionY = iPositionY;
}

int GetPositionX() const
{
return m_iPositionX;
}

int GetPositionY() const
{
return m_iPositionY;
}

void SetPositionX(int iPositionX)
{
m_iPositionX = iPositionX;
}

void SetPositionY(int iPositionY)
{
m_iPositionY = iPositionY;
}


private:
int m_iPositionX; // X坐标
int m_iPositionY; // X坐标
};


int main(void)
{
CPosition oPostion1;
const CPosition oPostion2(6, 8);

cout << oPostion1.GetPositionX() << endl;
oPostion1.SetPositionX(16);
cout << oPostion1.GetPositionX() << endl;
oPostion1.SetPositionY(18);
cout << oPostion1.GetPositionY() << endl;

cout << oPostion2.GetPositionX() << endl;
cout << oPostion2.GetPositionY() << endl;

return 0;
}
上面程序的输出结果为:

2.阅读下面程序,写出输出结果。
#include
using namespace std;

template
class CTest
{
public:
CTest(Type m_tArray[], int iSize):m_pArray(m_tArray)
{
m_iSize = iSize;
}

void Print() const
{
for (int i = 0; i < m_iSize; i++)
{
cout << m_pArray[i] << " ";
}
}

private:
Type *m_pArray;
int m_iSize;
};


int main(void)
{
int a[] = {1, 0, 8};
double b[] = {1.6, 1.8};

CTest oTest1(a, 3);
oTest1.Print();

CTest oTest2(b, sizeof(b) / sizeof(double));
oTest2.Print();

cout << endl;

return 0;
}
上面程序的输出结果为:

3.阅读下面程序,写出输出结果。
#include
using namespace std;

class CGoods
{
public:
CGoods(int iWeight)
{
m_iWeight = iWeight;
m_iTotalWeight = m_iTotalWeight + iWeight;
}

CGoods(const CGoods &oGood)
{
m_iWeight = oGood.m_iWeight;
m_iTotalWeight = m_iTotalWeight + m_iWeight;
}

~CGoods()
{
m_iTotalWeight = m_iTotalWeight - m_iWeight;
}

void Print() const;

static int GetTotalWeight()
{
return m_iTotalWeight;
}

private:
int m_iWeight;
static int m_iTotalWeight;
};

int CGoods::m_iTotalWeight = 8; // 初始化静态数据成员

void CGoods::Print() const
{
cout << this->m_iWeight << " " << this->m_iTotalWeight << " ";
}

int main(void)
{
CGoods oGood1(6);
oGood1.Print();

CGoods oGood2(oGood1);
oGood2.Print();

cout << CGoods::GetTotalWeight();
cout << endl;

return 0;
}
上面程序的输出结果为:

4.阅读下面程序,写出输出结果。
#include
using namespace std

;

template
class CTest
{
public:
CTest(Type tA = 0, Type tB = 0, Type tC = 0):m_tC(tC)
{
m_tA = tA;
m_tB = tB;
}

void Print()
{
cout << m_tA << endl;
cout << m_tB << endl;
}

void Print() const
{
cout << m_tC << endl;
}


private:
Type m_tA, m_tB;
const Type m_tC;
};


int main(void)
{
CTest oTest1;
oTest1.Print();

CTest oTest2(1, 9, 6);
oTest2.Print();

const CTest oTest3(0, 6, 1.8);
oTest3.Print();

cout << endl;

return 0;
}
上面程序的输出结果为:

五、程序改错题(本大题共4小题,每小题5分,共20分)指出下面程序中的错误的行,说明错误原因,并加以改正。
1.下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。
#include //1
using namespace std; //2
//3
class CArray //4
{ //5
public: //6
void CArray(int iArray[], int iSize):m_pArray(iArray), m_iSize(iSize) //7
{ //8
} //9
//10
int GetSize() //11
{ //12
return m_iSize; //13
} //14
//16
int &operator[](int iIndex) //17
{ //18
return m_pArray[iIndex - 1]; //19
} //20
//21
private: //22
int *m_pArray; // 指向一个数组空间 //23
int m_iSize; // 数组元素个数 //24
}; //25
//26
//27
int main(void) //28
{ //29
int s[]={3, 7, 2, 1, 5}; //30
CArray oArray(s, 5); //31
oArray[1] = 9; //32
for (int i = 1; i <= 5; i++) //33
{ //34
cout << oArray[i] << " "; //35
} //36
cout << endl; //37
//38
return 0; //39
} //40

2.下面程序中有错误,请指出出错的行,说明错误原因,并加以改正。
#include //1
using namespace std; //2
//3
class CTest //4
{ //5
public: //6
CTest(int iA = 0, int iB = 0):m_iA(iA), m_iB(iB) //7
{ //8
} //9
//10
void Print() //11
{ //12
cout << m_iA << "," << m_iB << endl; //13
} //14
//15
private: //16
int m_iA, m_iB; //17
}; //18
//19
//20
int main(void) //21
{ //22
const CTest oTest(12, 16); //23
oTest.Print();

//24
cout << endl; //25
//26
return 0; //27
} //28


3.下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。
#include //1
using namespace std; //2
//3
class CInteger //4
{ //5
public: //6
CInteger(int iNum=0) //7
{ //8
m_iNum = iNum; //9
} //10
//11
int operator int() //12
{ //13
return m_iNum; //14
} //15
//16
void Print() const //17
{ //18
cout << m_iNum << endl; //19
} //20
//21
private: //22
int m_iNum; //23
}; //24
//25
int main(void) //26
{ //27
CInteger oCInteger(168); //28
int iNum; //29
iNum = oCInteger; //30
cout << iNum << endl; //31
//32
return 0; //33
} //34

4.下面程序中有一处错误,请指出出错的行,说明错误原因,并加以改正。
#include //1
using namespace std; //2
//3
class CBase //4
{ //5
public: //6
CBase(int iBase = 0):m_iBase(iBase) //7
{ //8
} //10
//11
virtual void Show() const = 0; //12
//13
int Get() const //14
{ //15
return m_iBase; //16
} //17
//18
private: //19
int m_iBase; //20
}; //21
//22
class CDerive:public CBase //23
{ //24
public: //25
CDerive(int iBase = 0, int iDerive = 0):CBase(iBase) //26
{ //27
m_iDerive = iDerive; //28
} //29
//30
void Show() const //31
{ //32
cout << CBase::Get() << "," << m_iDerive << endl; //33
} //34
//35
private: //36
int m_iDerive; //37
}; //38
//39
void Print(const CBase obj) //40
{ //41
obj.Show(); //42
} //43
//44
int main(void) //45
{ //46
CDerive obj(10); //47
Print(obj); //48
return 0; //49
} //50

六、编程题(本大题共2个

小题,每小题8分,共16分)
1.编写一个函数模板,用于求数组中各元素之和,并编写测试程序进行测试。
函数模板声明如下:
template
Type Sum(Type tArray[], int iSize)

2.定义一个抽象类CShape,它有一个纯虚函数GetLength();派生出四边型类CSquare和圆类CCircle,在派生类中重载函数GetLength(),用于求图形的周长,编写测试程序进行测试。


C++面向对象程序设计模拟试题二参考答案
一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中,只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。
1.A 2.B 3.B 4.C 5.A
6.A 7.A 8.C 9.B 10.B
二、判断正误题(本大题共6小题,每小题2分,共12分)判断正误,在题后的括号内,正确的划上“√”错误的划上“×”。
1.参考答案:√
2.参考答案:√
3.参考答案:×
4.参考答案:√
5.参考答案:×
6.参考答案:×
三、填空题(本大题共6小题,每小题2分,共12分)不写解答过程,将正确的答案写在每小题的空格内。错填或不填均无分。
1.参考答案:2
2.参考答案:多态
3.参考答案:共享
4.参考答案:函数名
5.参考答案:delete
6.参考答案:operator<<
四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。
1.参考答案:
0
16
18
6
8
2.参考答案:1 0 8 1.6 1.8
3.参考答案:6 14 6 20 20
4.参考答案:
0
0
1
9
1.8
五、程序改错题(本大题共4小题,每小题5分,共20分)指出下面程序中的错误的行,说明错误原因,并加以改正。
1.参考答案:
出错行:第7行
原因:构造函数不能有返回值类型
改正:去掉void
2.参考答案:
出错行:第11、23行
原因:常对象只能调用常成员函数
改正:
将第11行改为:
void Print() const //11

将第23行改为:
CTest oTest(12, 16); //23
3.参考答案:
出错行:第12行
原因:类型转换函数没有返回值类型
改正:去掉返回值类型int
4.参考答案:
出错行:第40行
原因:抽象类不能用来直接作函数参数,但可使用抽象类的引用作参数。
改正:将第40行改为:
void Print(const CBase &obj) //40
六、编程题(本大题共2个小题,每小题8分,共16分)
1.参考程序:
#include
using namespace std;

template
Type Sum(Type tArray[], int iSize)
{
Type tSum = 0;
for (int i = 0; i < iSize; i++)
{
tSum = tSum + tArray[i];
}
return tSum;
}


int main(void)
{
int a[] = {1, 2, 3};
double b[] = {1.5, 2.8, 8.9, 8};

cout << Sum(a, 3) << endl;
cout <

< Sum(b, 4) << endl;

return 0;
}

2.参考程序:
#include
using namespace std;

class CShape
{
public:
virtual double GetLength() const = 0;
};

class CSquare:public CShape
{
public:
CSquare(double dWidth, double dHeight)
{
m_dWidth = dWidth;
m_dHeight = dHeight;
}

double GetLength() const
{
return 2 * (m_dWidth + m_dHeight);
}

private:
double m_dWidth, m_dHeight;
};

class CCircle:public CShape
{
public:
CCircle(double dRadius)
{
m_dRadius = dRadius;
}

double GetLength() const
{
return 3.1415926 * m_dRadius * m_dRadius;
}

private:
double m_dRadius;
};

int main(void)
{
CSquare oSquare(2, 3);
cout << oSquare.GetLength() << endl;

CCircle oCircle(10);
cout << oCircle.GetLength() << endl;

return 0;
}


相关文档
最新文档