四川大学期末考试试题(闭卷)A
一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中,只有一个是符合 1.通常情况下,函数模板中的类型参数个数不能是( )。
A. 0 B. 1 C. 3 D. 4 参:A 2.类的指针成员的初始化是通过函数完成的,这个函数通常是( )。
A. 析构函数 B. 构造函数 C. 其他成员函数 D. 友元函数 参:B 3.类型转换函数( )。
A. 不能带有参数 B. 最多只能带有2个参数
C. 只能带有一个参数 D. 可以带多个参数 参:A 4.静态成员函数没有( )。
A. 返回值 B. this指针 C. 指针参数 D. 返回类型 参:B 5.定义类模板时要使用关键字( )。
A. const B. new C. delete D. template 参:D 6.下列不具有访问权限属性的是( )。
A. 非类成员 B. 类成员 C. 数据成员 D. 函数成员 参:A 7.C++语言鼓励程序员在程序设计时将( )。
A. 数据和操作分别封装 B. 不同类型的数据封装在一起 C. 数据和操作封装在一起 D. 不同作用的操作封装在一起 参:C 8.所谓多态性是指( )。
A. 不同的对象调用不同名称的函数 B. 不同的对象调用相同名称的函数 C. 一个对象调用不同名称的函数 D. 一个对象调用不同名称的对象 参:B 9.解决二义性问题的方法有( )。
A. 只能使用作用域分辨操作符
B. 使用作用域分辨操作符或赋值兼容规则 C. 使用作用域分辨操作符或虚基类
D. 使用虚基类或赋值兼容规则 参:C 10.如果在类CTest的外面函数调用CTest::f();则函数f()是类CTest的( )。 A. 静态成员函数 B. 非静态成员函数 C. 友元函数 D. 前面都不正确 参:A
二、判断正误题(每小题2分,共10分)判断正误,在题后的括号内,正确的划上“√”错误的划上“×”。 1.friend属于类的存取权限。 ( ) 参:×
2.重载函数要求函数有相同的函数名,但具有不同的参数个数或参数类型。 ( ) 参:√
3.常对象可以调用任意成员函数。 ( ) 参:×
4.在类声明中不但可以说明成员函数的函数头,也可以定义函数体。 ( ) 参:√
5.析构函数可以有参数。 ( ) 参:×
三、填空题(本大题共5小题,每小题2分,共10分)不写解答过程,将正确的答案写在每小题的空格内。 1.编译时多态性是通过( )函数实现的。 参:重载 2.在C++中,如果类的名称是CTest,则此类的析构函数名称为( )。参:~CTest 3.使用new建立的动态对象在不用时必须用( )删除,以便释放所占用空间。参:delete 4.友元函数用关键字( )说明。 参:friend 5.使用C++风格的输入/输出时,在程序中必须包含头文件( )。参:iostream或iostream.h 四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。 1.阅读下面程序,写出输出结果。
#include int main(void) { } CPoint oPoint1; const CPoint oPoint2(3, 4); cout << oPoint1.GetX() << endl; oPoint1.SetX(1); cout << oPoint1.GetX() << endl; oPoint1.SetY(2); cout << oPoint1.GetY() << endl; cout << oPoint2.GetX() << endl; cout << oPoint2.GetY() << endl; return 0; void SetX(int x) { } void SetY(int y) { } int m_x; int m_y; // X坐标 // X坐标 m_y = y; m_x = x; int GetY() const { } return m_y; CPoint(int x = 0, int y = 0):m_x(x), m_y(y) {} int GetX() const { } return m_x; private: 上面程序的输出结果为: 参: 0 1 2 3 4 本题14页,本页为第2页 教务处试题编号: 2.阅读下面程序,写出输出结果。 #include int main(void) { } int s[]={3, 8, 1, 0, 6}; CArray cout << endl; return 0; cout << oArray[i] << \" \"; CArray(int iArray[], int iSize):m_pArray(iArray), m_iSize(iSize){ } int GetSize() { } int &operator[](int i) { } ElemType *m_pArray; int m_iSize; // 指向一个数组空间 // 数组元素个数 return m_pArray[i]; return m_iSize; private: 上面程序的输出结果为: 参: 3 8 1 0 6 3.阅读下面程序,写出输出结果。 #include CTest() { } ~CTest() { m_iCount--; 本题14页,本页为第3页 教务处试题编号: m_iCount++; }; int CTest::m_iCount = 0; int main(void) { } CTest obj1; cout << CTest::GetCount() << endl; CTest obj2; cout << obj2.GetCount() << endl; CTest obj3; cout << obj1.GetCount() << endl; CTest *p = new CTest; cout << p->GetCount() << endl; delete p; cout << CTest::GetCount() << endl; return 0; // 初始化静态数据成员 } static int GetCount() { } static int m_iCount; return m_iCount; private: 上面程序的输出结果为: 参: 1 2 3 4 3 4.阅读下面程序,写出输出结果。 #include CTest(Type tA = 0, Type tB = 0):m_tA(tA), m_tB(tB){ } void Show() { } void Show() const { } 本题14页,本页为第4页 教务处试题编号: cout << m_tB << endl; cout << m_tA << endl; cout << m_tB << endl; }; int main(void) { } CTest const CTest 上面程序的输出结果为: 参: 0 0 1 8 8 五、程序改错题(本大题共3小题,每小题5分,共15分)指出下面程序中的错误,说明错误原因,并加以改正。 1.下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。 #include class A public: //1 //2 //3 //4 //5 //6 //7 //8 //9 //10 //11 //12 //13 //14 //15 //16 //17 //18 //19 //20 //21 //22 //23 A(int a): m_a=a {} void Show() { } cout << m_a << endl; private: int m_a; int main(void) A obj(8); obj.Show(); return 0; 本题14页,本页为第5页 教务处试题编号: 参: 第7行“m_a=a”有错,初始列表的格式错,应改为“m_a(a)”。 2.下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。 #include class CTest public: { } { } //1 //2 //3 //4 //5 //6 //7 //8 //9 //10 //11 //12 //13 //14 //15 //16 //17 //18 //19 //20 //21 //22 //23 //24 //25 //26 //27 CTest(int iA = 0):m_iA(iA) void Show() cout << m_iA << endl; private: int m_iA; int main(void) const CTest oTest(12); oTest.Show(); cout << endl; return 0; 参: 第11行,第22行与第23行有错,常对象只能调用常成员函数,可将第22行的“const CTest oTest(12)”改为“CTest oTest(12)”;或将第11行的“void Show()”改为“void Show() const”。 3.下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。 #include class CBase public: //1 //2 //3 //4 //5 //6 //7 //8 //9 //10 //11 //12 //13 virtual void Show() = 0; class CDerive:public CBase public: CDerive(int x = 0): m_x(x){ } 本题14页,本页为第6页 教务处试题编号: }; { } { } //14 //15 //16 //17 //18 //19 //20 //21 //22 //23 //24 //25 //26 //27 //28 //29 //30 void Show() cout << m_x << endl; private: int m_x; int main(void) CBase obj(10); obj.Show(); return 0; 参: 第26行“CBase obj(10)”有错,Cbase是抽象类,不能直接生成对象,可改为“CDerive obj(10)”。 六、编程题(本大题25分) 定义一个抽象类CShape,它有一个纯虚函数GetArea ();派生出四边型类CSquare和圆类CCircle,在派生类中重新定义函数GetArea (),用于求图形的面积。在类CShape中增加静态累加器m_sCount,在类CShape的构造函数中对m_sCount进行累加,在类CShape中增加静态成员函数ShowNum()用于显示对象个数,在派生类中增加拷贝构造函数和重载赋值运算符,编写测试程序进行测试。 四川大学期末考试试题(闭卷)B 一、单项选择题(本大题共10小题,每小题2分,共20分)在每小题列出的四个备选项中,只有一个是符合 1.下列特性中,C与C++共有的是( )。 A. 继承 B. 封装 C. 多态性 D. 函数定义不能嵌套 参:D 2.对虚基类的定义,( )。 A. 不一定要使用虚函数 B. 必须使用虚函数 C. 必须使用private D. 必须使用public 参:A 3.假定CTest为一个类,并且构造函数的参数无缺省值,则执行CTest objTest语句时将自动调用该类的: A. 有参构造函数 B. 无参构造函数 C. 拷贝构造函数 D. 赋值重载函数 参:B 4.当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中( ) 。 A. 都是虚函数 B. 只有被重新说明时才是虚函数 C. 只有被重新说明为vittual时才是虚函数 D. 都不是虚函数 参:A 5.调用一个成员函数时,使用动态联编的情况是( )。 A. 通过对象调用一虚函数 B. 通过指针或引用调用一虚函数 C. 通过对象调用一静态函数 D. 通过指针或引用调用一静态函数 参 :B 6.在派生类中能够直接访问基类的( )。 A. 公有成员和私有成员 B. 保护成员和私有成员 C. 不可访问的和私有的成员 D. 保护成员和公有成员 参:D 7.在类定义中,private,protected,public关键字出现的次数为( )。 A. 任意多次 B. 至多一次 C. public至少出现一次 D. 至少一次 参:A 本题14页,本页为第7页 教务处试题编号: 8.一个函数功能不太复杂,实现代码少,但要求被频繁调用,则最好将其定义为( )。 A. 内联函数 B. 重载函数 C. 递归函数D. 嵌套函数 参:A 9.在以下有关继承的叙述中,正确的是( )。 A. 构造函数与析构函数都能被继承B. 派生类是基类的组合 C. 派生类对象除了能访问自已的成员以外,不能访问基类的所有成员 D. 除构造函数与析构函数外,基类的公有成员一定能被派生类的对象直接调用 参:D 10.编译时多态性使用什么获得?( ) A. 重载函数 B. 继承 C. 虚函数 D. B和C 参:A 二、判断正误题(每小题2分,共10分)判断正误,在题后的括号内,正确的划上“√”错误的划上“×”。 1.构造函数不能有返回值类型。( ) 参:√ 2.模板类与类模板的意义完全相同。 ( ) 参:× 3.析构函数在对象生存期结束时自动被调用。( ) 参:√ 4.纯虚函数必须由继承它的非抽象类重新说明 ) 参:√ 5.可以定义抽象类的对象。 ( ) 参:× 三、填空题(本大题共5小题,每小题2分,共10分)不写解答过程,将正确的答案写在每小题的空格内。错填或不填均无分。 1.在C++中,虚函数帮助类实现了( )性。 参:多态 2.定义静态成员的关键字是( )。 参:static 3.可以在进行类定义时给出成员函数的实现,这时成员函数是( )。参:内联函数 4.用关键字static修饰的成员称为( )。 参:静态成员 5.拷贝构造函数用它所在类的( )作为参数。 参:对象 四、程序分析题(本大题共4小题,每小题5分,共20分)给出下面各程序的输出结果。 1.阅读下面程序,写出输出结果。 #include class B: public A { public: }; class C: public A { public: }; 本题14页,本页为第8页 教务处试题编号: void Print() const { } cout << \"Class C\" << endl; void Print() const { } cout << \"Class B\" << endl; virtual void Print() const { } cout << \"Class A\" << endl; void Show(const A & obj) { } int main(void) { } A a; B b; C c; Show(a); Show(b); Show(c); A *p; p = &b; p->Print(); p = &c; p->Print(); return 0; obj.Print(); 上面程序的输出结果为: 参: Class A Class B Class C Class B Class C 2.阅读下面程序,写出输出结果。 #include int main(void) { } 本题14页,本页为第9页 教务处试题编号: int a[] = {1, 6, 9}; long b[] = {0, 8, 166}; Show(a, sizeof(a) / sizeof(int)); Show(b, 2); cout << endl; return 0; for (int i = 0; i < n; i++) { } cout << a[i] << \" \"; 上面程序的输出结果为: 参: 1 6 9 0 8 3.阅读下面程序,写出输出结果。 #include int main(void) { } B b; return 0; B() { } ~B() { } cout << \"执行B的析构函数\" << endl; cout << \"执行B的构造函数\" << endl; A() { } ~A() { } cout << \"执行A的析构函数\" << endl; cout << \"执行A的构造函数\" << endl; 上面程序的输出结果为: 参: 执行A的构造函数 执行B的构造函数 执行B的析构函数 执行A的析构函数 4.阅读下面程序,写出输出结果。 #include 本题14页,本页为第10页 教务处试题编号: { public: }; int CTest::m_n = 5; int main(void) { } CTest *p = new CTest(1, 6); p->Show(); cout << CTest::GetNum() << endl; delete p; cout << CTest::GetNum() << endl; return 0; // 初始化静态数据成员 ~CTest() { } static int GetNum() { } void Show() { } int m_x, m_y; static int m_n; cout << m_n << endl; cout << m_x << endl; return m_n; m_n--; CTest(int x, int y): m_x(x), m_y(y) { } m_n++; private: 上面程序的输出结果为: 参: 6 1 6 5 五、程序改错题(本大题共3小题,每小题5分,共15分)指出下面程序中的错误的行,说明错误原因,并加以改正。 1.下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。 #include class CTest //1 //2 //3 //4 //5 本题14页,本页为第11页 教务处试题编号: public: }; { } { } { } //6 //7 //8 //9 //10 //11 //12 //13 //14 //15 //16 //17 //18 //19 //20 //21 //22 //23 void CTest() cout << \"构造函数:\" << endl; ~CTest() cout << \"析造函数:\" << endl; int main(void) CTest obj; return 0; 参: 第7行“void CTest()”有错,构造函数没有返回值类型,应改为,应改为“CTest()”。 2.下面程序中有错误,请指出出错的行,说明错误原因,并加以改正。 #include class CTest public: { } { } //1 //2 //3 //4 //5 //6 //7 //8 //9 //10 //11 //12 //13 //14 //15 //16 //17 //18 //19 //20 //21 //22 //23 //24 //25 //26 //27 CTest(int iA):m_iA(iA){ } void SetValue(int iA) m_iA = iA; void Show() cout << m_iA << endl; private: int m_iA; int main(void) CTest oTest; oTest.Show(); oTest.SetValue(18); 本题14页,本页为第12页 教务处试题编号: } cout << endl; return 0; //28 //29 //30 //31 参: 类CTest有自已的构造函数,并且构造函数没有设置默认参数,所以没有与第25行的“CTest oTest”相匹配的构造函数,可以类Ctest增加无参构造函数即可: CTest() { } 3.下面程序中类的定义中有一处错误,请指出出错的行,说明错误原因,并加以改正。 #include class CInteger public: { } { } //1 //2 //3 //4 //5 //6 //7 //8 //9 //10 //11 //12 //13 //14 //15 //16 //17 //18 //19 //20 //21 //22 //23 //24 //25 //26 //27 //28 //29 //30 CInteger(int iNum=0): m_iNum(iNum){ } int operator int() return m_iNum; void Show() const cout << m_iNum << endl; private: int m_iNum; int main(void) CInteger obj(168); int iNum; cout << obj << endl; return 0; 参: 第9行“int operator int()”有错,类型转换函数不能有返回值类型,可改为“operator int()”。 六、编程题(本大题25分) 定义并实现一个抽象基类CPerson(人类),在此基础上,定义一级派生类,CStudent(学生类)和CTeacher(教师类),然后定义二级派生类CStudentTeacher(学生教师类),要求二级派生是一个多继承类,在类CPerson中增加静态累加器m_sCount,在类CPerson的构造函数中对m_sCount进行累加,在类CPerson中增加静态成员函数ShowNum()用于显示总人数(也就是对象个数),在派生类中增加拷贝构造函数和重载赋值运算符,并注意动态内 本题14页,本页为第13页 教务处试题编号: 存的管理问题,编写测试程序进行测试。 本题14页,本页为第14页 教务处试题编号: 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- azee.cn 版权所有 赣ICP备2024042794号-5
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务