树秋21:58:03
老师,首先,我代表我们班跟您说一声:“对不起”,对不起我们班这学期经常地迟到和没来,这我也无奈和愤慨,可是也无济于事,其次,鉴于上次的教训,今晚我们有很多同学今晚7:00就来了,我7:15分到的,已经有很多同学在了。。到7:30后,基本都到齐了,一学期不怎么努力,同学们到最后还是想考好,不想挂科,毕竟,全部放弃的是少部分同学,不排除有些同学不想用功了,那部分同学就是给他资料也不一定会去看的,这个学期我们班的科目比较多,要考7科,最近都忙着整理考试的资料,所以上次老师课讲完,复习后都没时间消化好,学习上是有些落后,但我相信,暂时的落后不是永远的,有上进的心会赶上来的,但这次期末考的确实很多,确实没把握能考好,这就是想说的第三点,恳请老师把选择题和判断题能发给我们,若没有这些基础分,这次挂的人会有很多,我知道很多人连基础都不好,我想老师也不希望看到我们挂了太多,就算有选择判断也不一定能考好,但连选择判断都没有了,真的是无从下手了,这次我知道同学们雪亮的眼睛都盯着选择和判断,老师也让我们得到了教训,现在老师能否将那份选择填空的发给我,这样的结局是否是最好的结局呢?已经只剩4天了,很多人都回天乏术,所以他们让我代表我们班向老师表达歉意并献上这点请求,现在期待着老师的回复~日期:2010-12-31
发送离线文件。。“练习题”
白伟华9:40:56
你们注意一下编程题目的第1、5、7、8、9、10
好好复习吧!虽然尽力了不一定满意~不要埋怨老师,谁不好在先大家心知肚明!上课讲的答案我都记下来了,,有答案的便是上课时讲的。。。大家找几个高手把答案统一一下吧~
1、派生类的构造函数的成员初始化列中,不能包含( C )。
A)基类的构造函数;
B)派生类中子对象的初始化;
C)基类的子对象的初始化;
D)派生类中一般数据成员的初始化。
2、面向对象程序设计思想的主要特征不包括( B )
E)继承性
F)功能分解,逐步求精
G)封装性和信息隐藏
H)多态性
3、面向对象程序设计中,( B )为程序的组成单元。
A)语句
B)类
C)主函数
D)子函数
4、假设已经有定义char * const name=”chen”;下面的语句中正确的是:(注意const放
前放后)
A)name[3]=?q?;
B)name=”lin”;
C)name= new char[5];
D)cout< 5、下列声明语句没有起到定义作用的是( D ) A)int count; B)c onst double pi=3.1415; C)i nt max ( int a, int b) { return a>b ? a : b;} D)extern long index; 6、在C++语言中,函数返回值的类型是由( B )定义的。 A)return 语句中的表达式类型 B)定义该函数时所指定的函数类型 C)调用该函数时的主调用函数类型 D)调用函数时系统临时 7、面向对象程序设计思想的主要特征不包括() A)继承性 B)功能分解,逐步求精 C)封装性和信息隐藏 D)多态性 8、面向对象程序设计中,()为程序的组成单元。 A)语句 B)类 C)主函数 D)子函数 9、在派生类中重新定义虚函数时,除了( D )方面,其他方面都必须与基类中相应 的虚函数保持一致。 A)参数个数 B)参数类型 C)函数名称 D)函数体 10、有关运算符重载正确的描述是:( D )。 A.C++语言允许在重载运算符时改变运算符的操作个数 B.C++语言允许在重载运算符时改变运算符的优先级 C.C++语言允许在重载运算符时改变运算符的结合性 D.C++语言允许在重载运算符时改变运算符的原来的功能 11、若MyClass为一个类,执行“MyClass a[3],*p[4];”语句时会自动调用该类构造 函数的次数是( B )。 A.4 B.3 C.2 D.7 12、7.对new运算符的下列描述中,( B )是错误的。 A.它可以动态创建对象和对象数组 B.用它创建对象数组时必须指定初始值 C.用它创建对象时要调用构造函数 D.用它创建的对象可以使用运算符delete来释放 13、8.在类外不能访问类私有成员属于类的( A )特征。 A.封装B.继承 C.多态D.抽象 14、namespace与class、struct、union和enum有着明显的区别,下面说法错误的是 ( C ) A)namespace只能在全局范围内定义,但它们之间可以互相嵌套 B)在namespace定义的结尾,右花扩号的后面不必跟一个分号 C)一个namespace可以在多个头文件中用一个标识符来定义,就好像重复定义一个类一样 D)namespace可以把全局名字空间当成一个小空间来管理 15、在C++语言中,数据封装要解决的问题是( C ) A)避免数据丢失 B)数据的规范化 C)防止不同模块之间数据的非法访问 D)便于数据转换 16、已知print()函数是一个类的常量成员函数,它无返回值,下列表示中(注意 const放前放后的区别,)是正确的。 A)void print() const B)const void print() C)void const print() D)void print(const) 17、以下正确的函数原型为( D ) A)func (int x ; int y); B)void (x , y); C)void (int x , y); D)void func (int , int); 18、为了避免在嵌套的条件语句if-else中产生二义性,C++规定:else子句总是与 ( B )配对。 A)缩排位置相同的if B)和其之前最近if C)和其之后最近if D)同一行上的if 19、对于一个功能不太复杂,并且要求加快执行速度,选用( A )合适。 A)内联函数 B)重载函数 C)递归调用 D)嵌套调用 20、编译时的多态性可以通过使用( A )获得。 A)虚函数和指针 B)重载函数和析构函数 C)虚函数和对象 D)虚函数和引用 21、9.类O定义了公有函数F1。P和Q为O的派生类,定义为class P:protected O{…}; class Q: public O{…}。则可以访问F1的是( )。 A.O、P、Q类的对象B.P、Q类的对象 C.O、Q类的对象D.O类的对象 22、A类定义如下,编译时有错误的行是( B )。 class A{ int a; //1行 public: ~A(int); //2行 A(); //3行 A(int); //4行 }; A.1 B.2 C.3 D.4 23、有如下程序: #include private: char name[80]; }; int main(){CD a,*b,d[2];return 0;} using namespace std; class CD{ public: ~CD(){cout< 运行时的输出结果是() A.CCC B.CCCC C.CC D.C 24、要实现动态联编,必须通过( A )调用虚函数。 A.对象指针B.成员名限定C.对象名D.派生类名 25、下面对于友元函数描述正确的是( C )。 A)友元函数的实现必须在类的内部定义 B)友元函数是类的成员函数 C)友元函数破坏了类的封装性和隐藏性 D)友元函数不能访问类的私有成员 26、设有如下定义int (*ptr)();,下面关于ptr正确叙述是(C?同学的选择)。 A)ptr是指向一维数组的指针变量。 B)ptr是指向int 型数据的指针变量。 C)ptr是指向函数的指针,该函数返回一个int型数据。 D)ptr是一个函数名,该函数的返回值是指向int型数据的指针。 27、使用重载函数编程序的目的是( A ) A)使用相同的函数名调用功能相似的函数 B)共享程序代码 C)提高程序的运行速度 D)节省存储空间 28、在派生类中重新定义虚函数时,除了()方面,其他方面都必须与基类中相 应的虚函数保持一致。 A)参数个数 B)参数类型 C)函数名称 D)函数体 29、有如下函数模板定义: template T func(T x, T y) { return x*x+y*y; } 在下列对func的调用中,错误的是()。 A.func(5, 11);B.func(3.6, 5.8); C.func(4, 9.4);D.func(…b?,…c?); 30、构造函数是在( B )时被执行的 A)程序编译 B)创建对象 C)创建类 D)程序装入内存 31、如果在基类中将show声明为不带返回值的纯虚函数,正确的写法是:( C ) A)virtual show()=0; B)virtual void show(); C)virtual void show()=0; D)void show()=0 virtual; 32、下列函数模板定义中,不合法的是(C,D不知哪个,自己看) A)template B)template C)inline template D)typedef char Cypte; Template 33、对象之间的联系纽带——( D )。 A.方法B.多态性 C.属性D.消息 34、15.UML中逻辑视图的作用是——()。 A.描述系统的功能需求,找出用例和执行者 B.描述如何实现系统内部的功能 C.描述系统代码构件组织和实现模块,及它们之间的依赖关系 D.描述系统的并发性,并处理这些线程间的通信和同步 35、在下面有关析构函数特征的描述中,正确的是:( C ) A)一个类中可以定义多个析构函数 B)析构函数名与类名完全相同 C)析构函数不能指定返回类型 D)析构函数可以有一个或多个参数 36、使用派生类的主要原因是:( A ) A)提高代码的可重用性 B)提高程序的运行效率 C)加强类的封装性 D)实现数据的隐藏 37、有关运算符重载正确的描述是:( D ) A)C++语言允许在重载运算符时改变运算符的操作个数 B)C++语言允许在重载运算符时改变运算符的优先级 C)C++语言允许在重载运算符时改变运算符的结合性 D)C++语言允许在重载运算符时改变运算符的原来的功能 38、对于一个功能不太复杂,并且要求加快执行速度,选用( A )合适。 A)内联函数B)重载函数C)递归调用D)嵌套调用 39、5、运行时的多态性可以通过使用( C )获得。 A) 虚基类B) 重载函数 C) 虚函数D) 引用基类 40、模板的使用是为了:() A) 提高代码的可重用性B) 提高代码的运行效率 C) 加强类的封装性D) 实现多态性 41、下列关于this指针的叙述中,错误的是() A)类的成员函数都有this指针 B)this隐含于每个类的非静态成员函数中 C)this指针是成员函数所属对象的指针 42、模板的使用是为了:() A)提高代码的可重用性 B)提高代码的运行效率 C)加强类的封装性 D)实现多态性 43、以下有关静态数据成员函数的叙述不正确的是() A)静态成员函数属于整个类 B)对静态成员函数的引用不允许使用对象名 C)在静态成员函数中不能直接引用类的非静态成员 D)使用类名可以直接调用其静态成员函数 44、以下( )成员函数表示纯虚函数。 A)virtual int vf(int); B)void vf(int)=0; C)virtual void vf(int){} D) virtual void vf()=0; 45、在表达式x+y*z中,+是作为成员函数重载的运算符,*是作为非成员函数重载的 运算符。则operator+有个参数,operator*有参数。( ) A) 1、2 B)2、1 C) 2、2 D)1、1 46、在下列函数原型中,可以作为类AA构造函数的是( )。 A)void AA(int); B)int AA(); C)AA(int)const; D)AA(int); 47、可以用p.a的形式访问派生类对象p的基类成员a,其中a是( ) A)私有继承的公有成员B)公有继承的私有成员 C)公有继承的保护成员D)公有继承的公有成员 48、对new运算符的下列描述中,( )是错误的。 A)它可以动态创建对象和对象数组 B)用它创建对象数组时必须指定初始值 C)用它创建对象时要调用构造函数 D)用它创建的对象可以使用运算符delete来释放 49、下列有关类的说法不正确的是( )。 A)对象是类的一个实例 B)任何一个对象只能属于一个具体的类 C)一个类只能有一个对象 D)类与对象的关系和数据类型与变量的关系相似 判断题 1.构造函数、析构函数、友元函数都属于类的成员函数。 2.静态数据成员是类的所有对象共享的数据。 3.可以将派生类对象的值赋给基类对象,也可以将基类对象的值赋给派生类 对象。 4.象的问题。 5.派生类默认的继承方式为public。 6.类模板实例化的过程是类模板->模板类->对象。 7.多继承情况下,派生类的构造函数的执行顺序取决于定义派生类时所指定 的各基类的顺序。 8.构造函数可以重载,析构函数也可以重载。 9.如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型 相同,那么,这个函数自动继承基类中虚函数的特性。 10.如果派生类的成员函数的原型与基类中被定义为虚函数的成员函数原型 相同,那么,这个函数自动继承基类中虚函数的特性。 11.设A为类,则A类的复制构造函数原型声明为void A(A&)。 12.可以将派生类对象的值赋给基类对象,也可以将基类对象的值赋给派生类 对象。 13.在公有继承中,基类中只有公有成员对派生类是可见的。 14.在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。 15.虚基类是用来解决多继承中公共基类在派生类中只产生一个基类子对 16.类模板实例化的过程是类模板->模板类->对象。 17.派生类是从基类派生出来,它不能生成新的派生类。 18.当对一个对象调用成员函数时,编译程序先将对象的地址赋值给this指 针后,再调用成员函数。 19.对象是属性和行为的集合。 20.模板的使用是为了加强类的封装性。 21.函数定义时在函数参数表后加=0表示该函数为纯虚函数。 22.对象是属性和行为的集合。 23.设A为类,则A类的复制构造函数原型声明为void A(A&)。 24.可以以”类名:: 静态成员函数(实参表)”和” 对象.静态成员函数(实 参表)”两种形式调用类的静态成员函数。 25.语句int a(5), *p; *p=a; 能够正常执行。 26.设A为类,则A *(*fpA[5])()的正确描述是:fpA是一个数组,数组的 5个元素都是A类对象。 27.派生类默认的继承方式为public。 28.类模板实例化的过程是类模板->模板类->对象。 29.重载双目运算符为成员函数时,一般将左操作数作为函数的参数。 30.可以将插入运算符”<<”和提取运算符”>>” 重载为类的成员函数。 31.函数定义时在函数参数表后加=0表示该函数为纯虚函数。 32.C++语言中,既允许单继承,又允许多继承。 33.派生类是从基类派生出来,它不能生成新的派生类。 34.派生类的继承方式有两种:公有继承和私有继承。 35.在公有继承中,基类中的公有成员和私有成员在派生类中都是可见的。 36.在公有继承中,基类中只有公有成员对派生类是可见的。 37.在私有继承中,基类中只有公有成员对派生类是可见的。 38.在私有继承中,基类中所有成员对派生类的对象都是不可见的。 39.在保护继承中,对于垂直访问同与公有继承,而对于水平访问同于私有继 承。 40.派生类试它的基类的组合。 41.构造函数可以被继承。 42.析构函数不能被继承。 43.子类型是不可逆的。 44.只要是类M继承了类N,就可以类M是类N的子类型。 45.如果A类型是B类型的子类型,则A类型必然适应于B类型。 46.多继承情况下,派生类的构造函数的执行顺序取决于定义派生类时所指定 的各基类的顺序。 47.单继承情况下,派生类对基类的成员的访问也会出现二义性。 48.解决多继承情况下出现的二义性的方法之一就是使用成员名限定法。 49.虚基类是用来解决多继承中公共基类在派生类中只产生一个基类子对象 的问题。 程序设计题 1.编写一个具有复制构造函数及传值构造函数,带字符数组指针的字符串类。(PPT) 2.编写一个程序,设计一个产品类Product,其定义如下: Class Product { char *name; //产品名称 int price; //产品单价 int quantity; //剩余产品数量 public: Product(char *n,int p,int q); //构造函数 ~Product(); //析构函数 void buy(int money); //购买产品 void get() const; //显示剩余产品数量 }; 并用数据进行测试。(10分) 3.以面向对象的方法设计一个类,此类包含3个私有数据:unlead,lead(无铅汽油和有铅汽油) 以及total(当天总收入,无铅汽油的价格是17元/公升,有铅汽油的价格是16元/公升),请以构造函数方式建立此值。试输入某天所加的汽油量,本程序将列出加油站当天的总收入。 4.编写一个程序计算两个给定长方形的面积,其中在设计类成员函数addarea()(用于计算两个 长方形的总面积)时使用对象作为参数。 5.编一个程序计算正方体,球体和圆柱体的表面积和体积。要求:抽象出一个公共基类 container为抽象类,在其中定义求表面积和体积的纯虚函数。抽象类中定义一个公共的数据成员radius,此数值可以作为球体的半径、正方体的边长、圆柱体底面圆半径。由该抽象类派生出的三个类,都有求表面积和体积的实际定义。键盘输入radius的值后,可以输出这3种立方体的面积。 6.CFrcation为分数类。使用该类完成分数的加、乘运算。类定义如下: class CFraction{ int numerator; //分子 int denominator; //分母 public: CFraction(int num=0, int deno=1) { numerator=num;denominator=deno;} CFraction operator+(const CFraction&); friend CFraction operator*(const CFraction&,const CFraction&); void disp();}; 设计如下函数: ①运算符+重载函数,实现分数相加; ②运算符*重载函数,实现分数相乘; ③disp函数,以“numerator/denominator”形式显示CFraction数据成员。 7.设计如下类: ①CShape抽象类。CShape有2个纯虚函数virtual double area()和virtual double volume(),没 有数据成员。 ②CShape公有派生矩形类CRectangle。CRectangle新增数据成员double width和length。给 出了基类虚函数的实现,分别返回矩形面积和体积。并设计CRectangle类的构造和复制构造函数。 ③设计主函数。在主函数中声明基类的指针,指向派生类的对象,调用虚函数显示派生类对 象的面积和体积。 8.编写一个程序计算“三角形、正方形、圆形”三种图形的面积,要求:a)抽象出一个基类base; b)在其中说明一个虚函数用来求面积;c)利用派生类定义“三角形、正方形、圆形”;d)编写主 函数并测试。 9.编写一个雇员和雇主数据输入和显示的程序。雇员数据有编号(no)、姓名(name)和工资 (salary),雇主数据有编号(no)、姓名(name)和职位(post)。要求将编号、姓名输入和 显示设计成一个类person,并作为雇员数据类employee和雇主数据类employer的基类,并编 写主程序进行执行,体现运行多态性,并给出执行结果。 10.编写C++风格的程序,解决百钱问题:将一元人民币兑换成1、2、5分的硬币,有多少种换 法? 11.编写一个求字符串“we study new and delete”长度的程序。要求定义类strtype,用new和delete 这两个关键字分配和撤销字符串空间:创建字符串空间时,要有打印信息“Creating string”; 撤销字符串空间时,要有打印信息“Deleting string”;定义函数show用于显示字符串的长度。 显示执行结果。 12.要求计算正方体、球和圆柱3个几何体的表面积和体积。可以抽象出一个公共的基类Base, 把它作为抽象类,在该类内定义求表面积和体积德纯虚函数。在抽象类中可以定义一个数据 成员length,它可作为球的半径、正方体的边长或圆柱体底面积的半径。请用C++语言定义 上述类。 读程序写结果 a)程序运行后的输出结果是 #include using namespace std; class complex { int real; int imag; public: complex(int r=0,int i=0):real(r),imag(i) {} void show() cout< complex& operator +=(complex &c) { real+=c.real; imag+=c.imag; return c; } complex& operator -=(complex &c) { real-=c.real; imag-=c.imag; return c; } friend complex& operator --(complex &); friend complex& operator ++(complex &); }; complex& operator --(complex &c) { c.real--; c.imag--; return c; } complex& operator ++(complex &c) { c.real++; c.imag++; return c; } void main() { int i=10,j=3,m=2,n=-6; complex test1(i,j); test1.show(); test1--; complex test2(m,n); test2.show(); test2++; test1+=test2; test1.show(); test2-=test1; test2.show(); } b)程序运行后的输出结果是 #include #include using namespace std; class subtest { string name; static int objectCount; public: subtest(const string& id = "") : name(id) { ++objectCount; print("subtest()"); } ~subtest() { --objectCount; print("~subtest()"); } subtest(const subtest& h) : name(https://www.doczj.com/doc/e112363233.html,) { name += " copy"; ++objectCount; print("subtest(const subtest&)"); } void print(const string& msg = "") const { if(msg.size() != 0) cout<< msg << endl; cout<< '\t' << name << ": " << "objectCount = " << objectCount << endl; } }; int subtest::objectCount = 0; subtest f(subtest x) { x.print("x argument inside f()"); cout << "Returning from f()" << endl; return x; } int main() { subtest h("h"); cout << "Entering f()" << endl; subtest h2 = f(h); h2.print("h2 after call to f()"); } ///:~ c)程序运行后的输出结果是 #include using namespace std; class A { public: virtual void f(){cout<<"A::f() executing\n";} }; class B:public A { public: void f(){cout<<"B::f() executing\n";} }; void main() { A a; B b; A* p = &a; p->f(); p = &b; p->f(); } d)写出执行下面程序的输出结果。class A { public: A() { cout<<"A"; } }; class B { public: B() { cout<<"B"; } }; class C : public A { B b; public: C() { cout<<"C"; } }; int main( ) { C obj; return 0; } 运行程序,屏幕上将显示输出()。 e)有如下程序 #include using namespace std; class A{ public: virtual void func1(){cout<< “A1”;} void func2(){cout<< “A2”;} }; class B: public A{ public: void func1(){cout<< “B1”;} void func2(){cout<< “B2”;} }; int main(){ A*p=new B; p->func1(); p->func2(); return 0; } 运行程序,屏幕上将显示输出___ ___。 f)以下程序是定义一个计数器类counter,对其重载运算符“+”,请填空。#include “iostream.h” class counter { private: int n; public: counter() {n=0;} counter(int i){n=i;} ____ //运算符重载函数(3分) { counter t; t.n=n+c.n; return t; } void disp() {cout<<"n="< }; void main() { counter c1(5),c2(10),c3; c3=c1+c2; c1.disp(); c2.disp(); c3.disp(); }