C++面向对象程序设计模拟试题打印.doc
C+面向对象程序设计模拟试题一一、单项选择题(本大题共10小题,每小题2分,共20分1说明虚函数的关键字是( )。A. inlineB. virtualC. defineD. static2在每个C+程序中都必须包含有这样一个函数,该函数的函数名为( )。A. main B. MAIN C. name D. function3cout是某个类的标准对象的引用,该类是( )。A. ostream B. istream C. stdout D. stdin4如果在类外有函数调用CPoint:func();则函数func()是类CPoint的( )。A. 私有静态成员函数 B. 公有非静态成员函数 C. 公有静态成员函数D. 友元函数5. 如果class类中的所有成员在定义时都没有使用关键字public、private或protected,则所有成员缺省定义为( )。A. public B. protected C. private Dstatic 6一个类的所有对象共享的是( )。A. 私有数据成员B. 公有数据成员C. 保护数据成员D. 静态数据成员7动态联编所支持的多态性称为( )A. 虚函数B. 继承C. 编译时多态性D. 运行时多态性8定义类模板时要使用关键字( )。A. constB. newC. deleteD. template9对虚基类的定义( )。A. 不需要使用虚函数B. 必须使用虚函数C. 必须使用privatD. 必须使用public10类型转换函数( )。 A. 不能带有参数B. 只能带一个参数C. 只能带2个参数D. 只能带3个参数二、判断正误题(本大题共6小题,每小题2分,共12分)1虚函数在基类和派生类之间定义,且要求函数原型完全一致。2抽象类可以用来直接创建对象。3内联函数中可以出现递归语句。4模板类与类模板的意义完全相同。5常对象只能调用常成员函数。6重载函数要求函数有相同的函数名,但具有不同的参数序列。三、填空题(本大题共6小题,每小题2分,共12分)1在用C+进行程序设计时,最好用( )代替malloc。2函数模板中紧随template之后尖括号内的类型参数都要寇以保留字( )。3编译时多态性可以用( )函数实现。4拷贝构造函数用它所在类的( )作为参数。5用关键字static修饰的类的成员称为( )成员。6重载运算符“+”的函数名为( )。四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。1阅读下面程序,写出输出结果。#include <iostream>using namespace std;class CArraypublic:CArray(int iArray, int iSize):m_pArray(iArray), m_iSize(iSize)int GetSize()return m_iSize;int &operator(int iIndex)return m_pArrayiIndex - 1;private:int *m_pArray;/ 指向一个数组空间int m_iSize;/ 数组元素个数;int main()int s=3, 7, 2, 1, 5;CArray oArray(s, 5);oArray1 = 9;for (int i = 1; i <= 5; i+)cout << oArrayi << " "cout << endl;return 0;上面程序的输出结果为:2阅读下面程序,写出输出结果。#include <iostream>using namespace std;template <class Type>void Print(Type a, int n)for (int i = 0; i < n; i+)cout << ai << " "int main()int a = 5, 6, 8;double b = 6.8, 9.6;Print(a, sizeof(a) / sizeof(int);Print(b, 2);cout << endl;return 0;上面程序的输出结果为:3阅读下面程序,写出输出结果。#include <iostream>using namespace std;class CTestpublic:CTest(int iVar):m_iVar(iVar)m_iCount+;CTest()void Print() const;static int GetCount()return m_iCount;private:int m_iVar;static int m_iCount;int CTest:m_iCount = 0;void CTest:Print() constcout << this->m_iVar << " " << this->m_iCount << " "int main()CTest oTest1(6);oTest1.Print();CTest oTest2(8);oTest2.Print();cout << CTest:GetCount();cout << endl;return 0;上面程序的输出结果为:4阅读下面程序,写出输出结果。#include <iostream>using namespace std;class CTestpublic:CTest(int iX = 0, int iY = 0, int iZ = 0):m_iZ(iZ)m_iX = iX;m_iY = iY;void Print()cout << m_iX << endl;cout << m_iY << endl;void Print() constcout << m_iZ << endl;private:int m_iX, m_iY;const int m_iZ;int main()CTest oTest1;oTest1.Print();CTest oTest2(1, 6, 8);oTest2.Print();const CTest oTest3(6, 0, 18);oTest3.Print();cout << endl;return 0;上面程序的输出结果为:六、编程题(本大题共2个小题,每小题8分,共16分)1编写一个函数模板,用于求参数的绝对值,并编写测试程序进行测试。函数模板声明如下:template <class Type>Type Abs(Type tVar)2定义一个复数类CComplex,定义带有2个参数(其中一个为缺省参数)的构造函数,显示复数值的函数Show(), 重载“+”运算符(用成员函数实现),并编写测试程序进行测试。C+面向对象程序设计模拟试题二一、判断题(每题2分,共12×2=24分)1. 按照标识符的要求,下划线是不能组成正确标识符的。()2. C+中使用了新的注释符(/),C语言中注释符(/*/)不能在C+中使用。()3. 引用就是某个变量的别名,对引用的操作,实质上就是对被引用的变量的操作。()4. 在不同类型操作数组成的表达式中,其表达式类型一定是最高类型double型。()5. For循环是只有可以确定的循环次数时才可使用,否则不能用for循环。()6. 返回值类型、参数个数和参数类型都相同的函数也可以重载。()7. 重新定义的标识符在定义它的区域内是可见的,而与其同名的原标识符在此区域内是不可见的但是却是存在的。()8. 通常的拷贝初始化函数的参数是某个对象的成员名或对象的引用名。()9. 友元函数是类的成员函数,所以可以存取或修改该类中的私有成员。()10. 已知:类A中一个成员函数说明如下:void Set(A&a);其中A &a的含意是将a的地址值赋给变量Set。()11. 具有转换函数功能的构造函数,是指只能带有一个或两个参数的构造函数。()12. 多继承情况下,派生类的构造函数的执行顺序取决于定义派生类时所指定的各基类的顺序,而与派生类构造函数中所定义的成员初始化列表的各项顺序无关。()二、读程题,写出程序的运行结果。(12题每题6分,34题每题8分,共28分)1、#include<iostream.h>void main()int i(0);while(+i)if(i= =10) break;if(i%3!=1) continue;cout<<i<<endl;2、#include <iostream.h>int a8=1,2,3,4,5,6,7;void fun(int *pa,int n);void main( ) int m=8; fun(a,m); cout<<a7<<endl; void fun(int *pa,int n)for (int I=0;I<n-1;I+) *(pa+7)+= *(pa+I);3、#include<iostream.h>void ff(int x),ff(double x);void main() float a(88.18);ff(a);char b('a');ff(b); void ff(int x)cout<<"ff(int): "<<x<<endl; void ff(double x)cout<<"ff(double): "<<x<<endl;4、#include <iostream.h>class AA public: AA(int i,int j) A=i;B=j;cout<<"Constructorn" AA(AA &obj) A=obj.A+1;B=obj.B+2;cout<<"Copy_Constructorn" AA() cout<<"Destructorn" void print() cout<<"A="<<A<<",B="<<B<<endl; private: int A,B;void main() AA a1(2,3); AA a2(a1);a2.print();AA *pa=new AA(5,6);pa->print(); delete pa; 三、编程题(每题10分,共10×2=20分)1、编写程序求1至100间所有素数之和,其中求素数要求用函数实现;2、编程打印如下图形:122333444455555四、综合分析应用题(共28分)1、阐述C中函数三种调用的方式实现机制、特点及其实参、形参的格式,最好用代码说明(10分)。2、用代码举例说明如何定义指向普通常量的指针、指向一维数组的指针、指向对象的指针、指向类的数据成员的指针和指向类的成员函数的指针。(10分)C+面向对象程序设计模拟试题三一、单项选择题(本大题共10小题,每小题2分,共20分)1下面有关重载函数的描述中,正确的是( )。A)重载函数必须具有不同的返回值类型 B)重载函数形参个数必须不同C)重载函数必须具有不同的形参表D)重载函数名可以不同2假定MyCIass为一个类,那么下列的函数说明中,( )为该类的析构函数。A)voidMyClass();B)MyClass(int n);C)MyClass( );D)MyClass( );3( )是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。 A)模板B)类C)对象D)函数4下面关于静态成员函数的途术中错语的是( )。A静态成员函数可以有返回值 B this指针可以指向静态成员函数C.静态成员函数可以具有指针参数D.静态成员函数可有具有返回值类型5定义类模板时要使用关键字( )。A. private B. public C. delete D. template6下列是重载乘法运算符的函数原型声明,其中错误的是( )。A)MyClass operator*(double,double);B)MyClass operator*(double,MyClass);C)MyClass operator*(MyClass,double);D)MyClass operator*(MyClass,MyClass);7以下( )成员函数表示纯虚函数。A)virtual int fun(int) B)void fun(int)=0C)virtual void fun()=0D)virtual void fun(int)8关于纯虚函数,下列表述中正确的是( )。A)纯虚函数的声明总是以"=0"结束B)含有纯虚函数的类可以定义对象C)含有纯虚函数的类是抽象类 D)上面都是错误的 9( )解决二义性问题。A. 只能使用作用域分辨操作符B. 只能使用虚基类C. 使用作用域分辨操作符或虚基类D. 上面都不能10实现编译时的多态性要使用( )。A)重载函数B)析构函数C)构造函数D)虚函数二、填空题(本大题共5小题,每小题2分,共10分)1定义一个函数名为fun,返回值为int,没有参数的纯虚函数的声明是( )。2定义静态成员函数应使用关键字( )。3在C+中,如果类的名称是CTest,则此类的构造函数名称为( )。4在类的对象被创建时,( )函数会被自动调用。5类中数据成员和成员函数的默认访问级( )。三、完成程序填题(本大题共3个小题,每小题3分,共9分) 1请完成下面的程序#include <iostream>/ 预处理命令using namespace std;/ 使用标准命名空间std/ 测试静态成员类class Testprivate: 1 Test int count;/ 对象数public:Test() count+; / 构造函数, 实现对对象进行计数static void Show() cout << "共有" << count << "个对象!" << endl; / 显示对象数;int Test:count = 0;/ 初始化静态数据成员赋初值int main(void)/ 主函数main(void)Test obj1, obj2, obj3;/ 定义对象Test:Show();/ 显示对象数return 0; / 返回值0,返回操作系统2请完成下面的程序#include <iostream>/ 预处理命令using namespace std;/ 使用标准命名空间std/ 整数类class Integerprivate:int a;/ 数据成员public:Integer(int x = 0) a = x; / 构造函数operator int() return a; / 类型转换函数Integer operator+(const Integer &i) const/ 重载加法运算符+return c2 ;/ 返回和;int main(void)/ 主函数main(void)Integer a(2), b(3), c;/ 定义整数对象c = a + b;/ 求和cout << c << endl;/ 显示和return 0; / 返回值0, 返回操作系统3请完成下面的程序#include <iostream>/ 预处理命令using namespace std;/ 使用标准命名空间sttemplate <class ElemType>class A private:ElemType a;/ 数据成员public:A(ElemType x): a(x) / 构造函数void Show() const cout << a << endl; / 显示a之值;int main(void)/ 主函数main(void)A< 3 > obj("Hello, world!");/ 定义对象obj.Show();/ 显示相关信息return 0;/ 返回值0, 返回操作系统四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。1阅读下面程序,写出输出结果。#include <iostream>/ 预处理命令using namespace std;/ 使用标准命名空间stdclass Pointprivate:int x;/ x坐标int y;/ y坐标public:Point(int a = 0, int b = 0):x(a), y(b)int GetX() const return x; int GetY() const return y; void SetX(int a) x = a; void SetY(int b) y = b; ;int main(void)Point obj1;const Point obj2(9, 98);cout << obj1.GetX() << endl;obj1.SetX(5);cout << obj1.GetX() << endl;obj1.SetY(18);cout << obj1.GetY() << endl;cout << obj2.GetX() << endl;cout << obj2.GetY() << endl;return 0; / 返回值0,返回操作系统上面程序的输出结果为:2阅读下面程序,写出输出结果。#include <iostream>/ 预处理命令using namespace std;/ 使用标准命名空间stdclass Arrayprivate:int *elem;/ 数组元素存储空间int size;/ 数组元素个数public:Array(int a, int sz): elem(a), size(sz) / 构造函数int GetSize() return size; int &operator(int pos) return elempos - 1; / 重载下标运算符;int main(void)int a = 1, 2, 3, 4, 5;Array obj(a, 5);obj1 = 8;for (int i = 1; i <= obj.GetSize(); i+)/ 依次输出数组各元素之值cout << obji << " "cout << endl;return 0; / 返回值0, 返回操作系统上面程序的输出结果为:3阅读下面程序,写出输出结果。#include <iostream>/ 预处理命令using namespace std;/ 使用标准命名空间stclass Apublic:A() cout << "构造A" << endl; / 构造函数A() cout << "析构A" << endl; / 析构函数;class B: public Apublic:B() cout << "构造B" << endl; / 构造函数B() cout << "析构B" << endl; / 析构函数;int main(void)B obj;A *p = new A;return 0; / 返回值0, 返回操作系统上面程序的输出结果为:4阅读下面程序,写出输出结果。#include <iostream>/ 预处理命令using namespace std;/ 使用标准命名空间stdtemplate <class ElemType>ElemType f(ElemType x) return x * (ElemType)5.1; template <class ElemType>void f(ElemType x, ElemType y) x = x * 1.1;y = y * 1.1;cout << x << endl;cout << y << endl;int main(void)cout << f(3.0) << endl;f(1, 2);f(1.0, 2.0);system("PAUSE"); / 调用库函数system( )输出系统提示信息return 0; / 返回值0, 返回操作系统上面程序的输出结果为:六、编程题(本大题26分)编写程序,定义抽象基类Shape(形状),由它派生出2个派生类:Circle(圆形) 和Rectangle(矩形),用函数Show()分别显示各种图形的相关信息,最后还要显示所有图形的总面积。C+面向对象程序设计模拟试题四一、单项选择题(本大题共10小题,每小题2分,共20分)1下列关于C+函数的说明中,正确的是( )。A)内联函数就是定义在另一个函数体内部的函数 B)函数体的最后一条语句必须是return语句C)调用一个函数之前,如果还没有定义这个函数,必须先声明其原型 D)编译器会根据函数的返回值类型和参数表来区分函数的不同重载形式2假定MyCIass为一个类,那么下列的函数说明中,( )为该类的无参构造函数。A)void MyClass();B)MyClass(int n);C)MyClass( );D)MyClass( );3下列叙述中,错误的是( )。A)派生类可以使用private派生B)对基类成员的访问必须是无二义性的C)基类成员的访问能力在派生类中维持不变D)赋值兼容规则也适用于多继承的组合4当一个类的某个函数被说明为virtual时,该函数在该类及其所有派生类中( ) 。A. 都是虚函数B. 只有被重新说明为vittual时才是虚函数 C. 都不是虚函数 D. 上面都不正确 5派生类的构造函数的成员初始化表中,不能包含( )。A)基类的构造函数 B)派生类中子对象的初始化C)基类中子对象的初始化D)派生类中一般数据成员的初始化6下列是重载加法运算符的函数原型声明,其中错误的是( )。A)MyClass operator+(double,double);B)MyClass operator+(double,MyClass);C)MyClass operator+(MyClass,double);D)MyClass operator+(MyClass,MyClass);7派生类中的成员不能直接访问基类中的( )成员。A)public B)private C)virtualD)protected8实现运行时的多态性要使用( )。A)重载函数B)析构函数C)构造函数D)虚函数9如果在类MyClass的外面使用函数调用MyClass:f();则函数f()是类MyClass的( )。 A静态成员函数B 非静态成员函数C.友元函数 D.前面都不正确10由于常对象不能被更新,因此( )。A)通过常对象只能调用它的常成员函数B)通过常对象只能调用静态成员函数C)常对象的成员都是常成员D)通过常对象可以调用任何不改变对象值的成员函数二、填空题(本大题共5小题,每小题2分,共10分1对于派生类的构造函数,在定义对象时构造函数的执行顺序为:先执行调用_的构造函数,再执行调用子对象类的构造函数,最后执行派生类的构造函数体中的内容。2声明类模板应使用关键字( )。3重载的关系运算符和逻辑运算符的返回类型应当是( )。4在面向对象方法中,类的实例称为( )。5在类的对象被释放时,( )函数会被自动调用。三、完成程序填题(本大题共3个小题,每小题3分,共9分)1请完成下面的程序#include <iostream>/ 预处理命令using namespace std;/ 使用标准命名空间std/ 测试静态成员类class Testprivate:int a;/ 数据成员public:Test(int x = 0): 1 / 构造函数void Show() cout << "a:" << a << endl; / 显示数据成员之值;int main(void)/ 主函数main(void)Test obj(168);/ 定义对象obj.Show();/ 显示数据成员之值return 0; / 返回值0,返回操作系统2请完成下面的程序#include <iostream>/ 预处理命令using namespace std;/ 使用标准命名空间st/ 整数类class Integerprivate:int a;/ 数据成员public:Integer(int x = 0) a = x; / 构造函数 2 () return a; / 类型转换函数(将类类型转换为整型);int main(void)/ 主函数main(void)Integer a = 6;/ 定义整数对象cout << a << endl;/ 显示整数return 0; / 返回值0, 返回操作系统3请完成下面的程序#include <iostream>/ 预处理命令using namespace std;/ 使用标准命名空间std/ 复数类class Complexprivate:double realPart;/ 实部double imagePart;/ 虚部public:Complex(double real = 0, double image = 0): realPart(real), imagePart(image) / 构造函数double GetRealPart() const return realPart; / 返回实部double GetImagePart() const return imagePart; / 返回虚部Complex operator+(const Complex &a) const/ 重载加法运算符+return Complex( 3 );/ 返回和;int main(void)/ 主函数main(void)Complex a(1, 2), b(2, 6), c;/ 定义复数对象c = a + b;/ 复数加法运算cout << "a=" << a.GetRealPart() << "+" << a.GetImagePart() << "i" << endl;/ 显示acout << "b=" << b.GetRealPart() << "+" << b.GetImagePart() << "i" << endl;/ 显示bcout << "c=" << c.GetRealPart() << "+" << c.GetImagePart() << "i" << endl;/ 显示creturn 0; / 返回值0, 返回操作系统四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。1阅读下面程序,写出输出结果。#include <iostream>/ 预处理命令using namespace std;/ 使用标准命名空间stdclass Apublic:virtual void Show() const cout << "Class A" << endl; ;class B: public Apublic:void Show() const cout << "Class B" << endl; ;void Show(const A & obj) obj.Show(); int main(void)A a; B b; Show(a); Show(b);A *p;p = &a;p->Show();p = &b;p->Show();B *q;q = &b;q->Show();return 0; / 返回值0,返回操作系统上面程序的输出结果为:2阅读下面程序,写出输出结果。#include <iostream>/ 预处理命令using namespace std;/ 使用标准命名空间stdtemplate <class ElemType>void Show(ElemType a, int n)for (int i = 0; i < n; i+) cout << ai << " " int main(void)int a = 1, 6, 9;Show(a, sizeof(a) / sizeof(int);Show(a, 2);cout << endl;return 0; / 返回值0, 返回操作系统上面程序的输出结果为:3阅读下面程序,写出输出结果。#include <iostream>/ 预处理命令using namespace std;/ 使用标准命名空间stdclass MyClasspublic:MyClass() count+; MyClass()count-; static int GetCount() return count; private:static int count;int MyClass:count = 0;/ 初始化静态数据成员int main(void)MyClass obj1;cout << MyClass:GetCount() << endl;MyClass obj2;c