public:
A(int i=0){a=i;}
int Geta(){return a;}
void show(){cout< class B {A a; int b; public: B(int i,int j)_________ {} void show(){cout< void main() {B b[2]={B(10,11),B(12,13)}; for(int i=0;i<2;i++) __________ } 答案::a(j),b(i),b[i].show(); [解析]在构造函数中对数据成员初始化,从结果先输出a,后b,所以对a=j,b=i;在循环中 输出成员,调用show成员。 五、程序分析题(本大题共2小题,每小题5分,共10分) 1. 给出下面程序输出结果。 #include Base(int y=0) {Y=y;cout<<\\n\~Base() {cout<<\\n\void print() {cout < class Derived:public Base {private: int Z; public: Derived (int y, int z):Base(y) {Z=z; cout<<\\n\} ~Derived() {cout<<\~Derived()\n\void print() {Base::print(); cout< void main() {Derived d(10,20); d.print(); } 答案:Base(10) Derived(10,20) 10 20 ~Derived() ~Base() [解析]派生类对象,先调用基类构造函数输出Base(10),后调用派生类构造函数输出 Derived(10,20),后执行d.print(),调用派生类的print,再调用Base::print()输出10,后返回 输出z的值20。后派生类析构,再基类析构。 2. 给出下面程序输出结果。 #include test(int i=0):x(i){} virtual void fun1() {cout << \}; class ft:public test {int y; public: void fun1(){cout <<\ft(int i=2):test(i),y(i){} }; void main() { ft ft1(3); void (test::*p)(); p=test::fun1; (ft1.*p)(); } 答案:ft::y=3 [解析]指向函数的指针的使用,p指向fun1函数,(ft1.*p)实际就是调用ft1对象的 fun1()函数。 六、程序设计题(本大题共1小题,共10分) 1. 求n(n=3)个学生的最高分和最低分及姓名,已有student类声明和main函数,完成 student类的实现部分。 #include student(char na[]=\char * getname(); friend int compare(student &s1,student &s2); int getdeg(); }; void main() {student st[]={student(\王强\李刚\张雪\int i=0,min=0,max=0; for(i=1;i<3;i++) {if(compare(st[max],st[i])==-1) max=i; if(compare(st[min],st[i])==1) min=i; } cout<<\最高分:\[max].getdeg()<<\姓名:\[max].getname()< 答案:student::student(char na[],int d) {strcpy(name,na); deg=d; } char * student::getname(){return name;} int compare(student &s1,student &s2) {if(s1.deg>s2.deg) return 1; else if(s1.deg==s2.deg) return 0; else return -1; } int student::getdeg() {return deg;}__ C++程序设计模拟试卷(六) 一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中 只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无 分。 1. 当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中() A. 都是虚函数 B. 只有被重新说明时才是虚函数 C. 只有被重新说明为virtual时才是虚函数 D. 都不是虚函数 答案:A 解析:在基类声明为virtual的函数为虚函数,在派生类中只要有相同的函数(函数名相 同、返回值相同、形参类型和个数相同)即使不用virtual说明,也都是虚函数。 2. 以下基类中的成员函数表示纯虚函数的是 () A. virtual void vf(int) B. void vf(int)=0 C. virtual void vf()=0 D. virtual void yf(int){} 答案:C 解析:纯虚函数是特殊的虚函数,没有函数体,形式为:virtual返回类型函数名(形参 列表)=0;因此选C项。 3. 下面对静态数据成员的描述中,正确的是() A. 静态数据成员可以在类体内进行初始化 B. 静态数据成员可以直接用类名或者对象名来调用 C. 静态数据成员不能用private控制符修饰 D. 静态数据成员不可以被类的对象调用 答案:B 解析:静态成员可用类名或者对象名来调用,静态数据成员必须在类外进行初始化。静态 成员可以用public、private和protected修饰。所以选B项。 4. 所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体 也就是() A. 类 B. 对象 C. 函数体 D. 数据块 答案:A 解析:类即数据和操作的组合体,数据是类的静态特征,操作是类具有的动作。 5. 类B是类A的公有派生类,类A和类B中都定义了虚函数func(),p是一个指向类A对象的指针 ,则p->A::func()将() A. 调用类A中的函数func() B. 调用类B中的函数func() C. 根据p所指的对象类型而确定调用类A中或类B中的函数func() D. 既调用类A中函数,也调用类B中的函数 答案:A 解析:指向类成员指针的使用,A::func()是明确调用A类的func函数,所以不管p指向基 类或者派生类对象,都执行基类虚函数。注意p->A::func()和p->fun();进行区分。如果使用p- >fun(),因为p指向派生类对象,由动态多态性可知要调用派生类的虚函数。 6. 在面向对象的程序设计中,首先在问题域中识别出若干个 () A. 函数 B. 类 C. 文件 D. 过程 答案:B 解析:面向过程的和面向对象都具有、函数、文件和过程这些概念,而面向对象程序才有 类和对象的特征。所以选择B。 7. 在下列成对的表达式中,运算结果类型相同的一对是() A. 7.0/2.0和7.0/2 B. 5/2.0和5/2 C. 7.0/2和7/2 D. 8/2和6.0/2.0 答案:A 解析:小数默认的类型为double类型,整数除以整数结果是取整的结果。A、B、C和D项的第一项 分别是double、double、double和int类型的,第二项分别是double、int、int和double类型,所 以选择A项。 8. 下列不具有访问权限属性的是() A. 非类成员 B. 类成员 C. 数据成员 D. 函数成员 答案:A 解析:类成员包括成员函数和数据成员,都可以使用访问权限public、private和protected来修 饰,而普通的变量不能使用访问权限来说明。 9. 以下有关继承的叙述正确的是 () A. 构造函数和析构函数都能被继承 B. 派生类是基类的组合 C. 派生类对象除了能访问自己的成员以外,不能访问基类中的所有成员 D. 基类的公有成员一定能被派生类的对象访问 答案:C 解析:构造函数和析构函数不能被派生类继承,A项错误。派生类是基类的扩展,B项错。 派生类可以访问基类公有和保护类型的成员,不能访问基类私有成员。D项基类是公有的成员 ,若采用私有继承,派生类对象不能直接访问。选择C项。 10. 下列有关模板和继承的叙述正确的是 () A. 模板和继承都可以派生出一个类系 B. 从类系的成员看,模板类系的成员比继承类系的成员较为稳定 C. 从动态性能看, 继承类系比模板类系具有更多的动态特性 D. 相同类模板的不同实例一般没有联系,而派生类各种类之间有兄弟父子等关系 答案:D 解析:类是相同类型事物的抽象,具有不同的操作。而模板是不同类型的事物,具体相同 的操作的抽象。类模板的实例化后,各个对象没有任何关系。而类对象是通过派生、继承等关系 的关系。 11. 适宜采用inline定义函数情况是() A. 函数体含有循环语句 B. 函数体含有递归语句 C. 函数代码少、频繁调用 D. 函数代码多、不常调用 答案:C 解析:内联函数具有程序代码少、频繁调用和执行效率高的特征,所以选择C项。 12. 要采用动态多态性,说法正确的是() A. 基类指针调用虚函数 B. 派生类对象调用虚函数 C. 基类对象调用虚函数 D. 派生类指针调用虚函数 答案:A 解析:使用基类的指针或引用,由指向或引用的对象来决定调用不同类的虚函数。所以选 择A。 13. C++类体系中,不能被派生类继承的有() A. 转换函数 B. 构造函数 C. 虚函数 D. 静态成员函数 答案:B 解析:构造函数不能被继承,而转换函数、虚函数和静态成员函数都可以被继承,所以选 择B项。 14. 下列不是描述类的成员函数的是() A. 构造函数 B. 析构函数 C. 友元函数 D. 拷贝构造函数 答案:C 解析:构造函数、析构函数、拷贝构造函数都是特殊的成员函数,友元则不是成员函数。 所以选择C项。 15. 下列不能作为类的成员的是() A. 自身类对象的指针 B. 自身类对象 C. 自身类对象的引用 D. 另一个类的对象 答案:B 解析:类的定义,如果有自身类对象,使得循环定义,B项错误。在类中具有自身类的指针,可 以实现链表的操作,当然也可以使用对象的引用。类中可以有另一个类的对象,即成员对象。所 以选择B选项。 16. 下列不是描述类的成员函数的是() A. 构造函数 B. 析构函数 C. 友元函数 D. 拷贝构造函数 答案:C 解析:友元函数不是类成员,只是它可以访问类中的成员。 17. 关于对象概念的描述中,说法错误的是() A. 对象就是C语言中的结构变量 B. 对象代表着正在创建的系统中的一个实体