C++习题3(继承和多态)
- 格式:docx
- 大小:22.97 KB
- 文档页数:11
一、选择题1.C++语言属于( C )。
A)自然语言B)机械语言C)面向对象语言D)汇编语言2.下面选项中不属于面向对象程序设计特点的是(C) 。
A)继承性B)多态性C)相似性D)封装性3.可用作C++语言用户标识符的一组标识符是( B )。
A)void define +WORD B)a3_b3 _123 YNC)for -abc Case D)2a DO sizeof4.假定一个二维数组的概念语句为“int a[3][4]={{3,4},{2,8,6}};”,那么元素a[2][1]的值为(A)。
A)0 B)4 C)8 D)65.以下情形中,哪一种情形可不能挪用拷贝构造函数( B )A)用派生类的对象去初始化基类对象时B)将类的一个对象赋值给该类的另一个对象时C)函数的形参是类的对象,挪用函数进行形参和实参结合时D)函数的返回值是类的对象,函数执行返回挪用者时6.以下哪一关键字可用于重载函数的区分(C)A)extern B)static C)const D)virtual7.以下有关数组的表达中,正确的选项是( B )A)C++中数组的存储方式为列优先存储B)数组名能够作为实参赋值给指针类型的形参C)数组下标索引从1开始,至数组长度n终止D)数组指针的语法形式为:类型名*数组名[下标表达式];8.以下有关继承和派生的表达中,正确的选项是( C)A)派生类不能访问通过私有继承的基类的珍惜成员B)多继承的虚基类不能够实例化C)假设是基类没有默许构造函数,派生类就应当声明带形参的构造函数D)基类的析构函数和虚函数都不能够被继承,需要在派生类中从头实现9.实现运行时多态的机制是( A )A)虚函数B)重载函数C)静态函数D)模版函数10.如有下面的函数挪用:fun(a+b, 3, max(n-1, b));其中实参的个数是(A)A)3 B)4 C)5 D)611.以下关于this指针的说法正确的选项是(B)A)this指针存在于每一个函数当中B)在类的非静态函数中this指针指向挪用该函数的对象C)this指针是指向虚函数表的指针D)this指针是指向类的函数成员的指针12.在以下关于C++函数的表达中,正确的选项是(C)A)每一个函数至少要有一个参数B)每个函数都必须返回一个值C)函数在被挪用之前必需先声明D)函数不能自己调用自己13.以下运算符中,不能重载的是(C)A)&& B)!= C). D)->14.下面程序的输出结果是(B)#include <iostream>using namespace std;int i = 0;int fun(int n){static int a = 2;a++;return a+n;}void main(){int k = 5;{int i = 2;k += fun(i);}k += fun(i);cout << k;}A)13 B)14 C)15 D)1615.下面的程序段的运行结果为(D)char str[] = "job", *p = str;cout << *(p+2) << endl;A)98 B)无输出结果C)字符’b’的地址D)字符’b’16.下面程序的输出结果是( C )#include <iostream>using namespace std;class A{public:A (int i) { x = i; }void dispa () { cout << x << “,”; }private :int x ;};class B : public A{public:B(int i) : A(i+10) { x = i; }void dispb() { dispa(); cout << x << endl; } private :int x ;};void main(){B b(2);();}A)10,2 B)12,10 C)12,2 D)2,2 17.下面程序的输出结果是(C)#include <iostream>using namespace std;class Base{public:Base(int i) { cout << i; }~Base () { }};class Base1: virtual public Base{public:Base1(int i, int j=0) : Base(j) { cout << i; } ~Base1() {}};class Base2: virtual public Base{public:Base2(int i, int j=0) : Base(j) { cout << i; }~Base2() {}};class Derived : public Base2, public Base1{public:Derived(int a, int b, int c, int d) : mem1(a), mem2(b), Base1(c),Base2(d), Base(a){ cout << b; }private:Base2 mem2;Base1 mem1;};void main() { Derived objD (1, 2, 3, 4); }A)134122 B)123412 C)D)14321218.下面程序的输出结果是(C)#include <iostream>using namespace std;class Base{public:virtual void f() { cout << “f0+”; }void g() { cout << “g0+”; }};class Derived : public Base{public:void f() { cout << “f+”; }void g() { cout << “g+”; }};void main() { Derived d; Base *p = &d; p->f(); p->g(); }A)f+g+ B)f0+g+ C)f+g0+ D)f0+g0+19.下面程序的输出结果是( C )#include <iostream>using namespace std;class Sample{friend long fun (Sample s){if < 2) return 1;return * fun(Sample);}public:Sample (long a) { x = a; }private:long x;};void main(){int sum = 0;for (int i=0; i<4; i++){sum += fun(Sample(i));}cout << sum;}A)12 B)16 C)10 D)3420.以下程序的输出结果是:(D)#include <iostream>using namespace std;int fun(char *s){ char *p=s;while (*p!='\0') p++;return (p-s);}void main(){cout<<fun("abc")<<endl;}A.0 B. 1 C. 2 D. 3 21.有如下程序段:int i=1;while(1){i++;if (i==10) break;if(i%2==0) cout<<’*’;}执行那个程序段输出字符*的个数是(C)A. 10B. 3C. 422.以下关于虚基类的描述中,错误的选项是(C)A. 使用虚基类可以消除由多继承产生的二义性B. 构造派生类对象时,虚基类的构造函数只被调用一次C. 声明class B:virtual public A 说明类B为虚基类D. 建立派生类对象时,首先调用虚基类的构造函数23.有下类概念Class A {Char *a;Public:A():a(0){}A(char *aa) {new char[strlen(aa)+1] B. char[strlen(aa)+1]C. char[strlen(aa)]D. new char[sizeof(aa)-1]24.假定AA为一个类,a为该类私有的数据成员,GetValue( )为该类公有函数成员,它返回a的值,x为该类的一个对象,那么访问x对象中数据成员a的格式为(X)。
面向对象的程序设计语言――C++(第二版)-习题参考答案课后习题答案以及代码习题参考答案第1章1.填空题C++语言概述(1)函数说明,函数体(2)声明区,主程序区,函数定义区(3)多态性(4)namespace,using(5)std(6)cin,(7)//(8)对数据的操作2.判断题(1)对(2)错(3)错(4)错(5)错3.改错题(1)没有函数体,应改为void main() {};(2)语句没有分号,应改为using namespace myspace;(3)cout和操作符共同完成输出的功能,应改为cout“ Input your name:";(4)应改为#include iostream.h4.简答题5.编程题(略)(略)第2章1.选择题基本数据类型、运算符与表达式(1)B (2)D (3)B (4)D (5)B课后习题答案以及代码2.简答题(1)(a)、(c)(e)、(f)、(g)、(h)、(i)(2)(a)、(g)、(i)、(j)(3)(a)5.5(b)0(c)20(d)0,0(e)1(f)1,2(g)3(h)-40(i)2(j)3(k)s1='0's1='9'(l)N!=03.读程序写结果(1)0,15(2)(1、1、1),(-1、-1、-1)(3)(a)a*a+2*a*b+b*b(b)4.0/3.0*3.__-__R*R*R(c)5.0/9.0*(F-32)(d)b=ab=c(4)364143(5)x=14.编程题(略)第3章1.选择题(1)B (2)A (3)A (4)C2.判断题(1)错(2)对(3)对(4)错3.读程序写结果(1)C++的控制语句5)A 5)错((课后习题答案以及代码12 23 3 34 4 4 45 5 5 5 5(2)11 2 11 2 3 2 11 2 3 4 3 2 11 2 3 4 5 4 3 2 1(3)j的值为0;i的值为2;4.编程题(略)第4章1.填空题函数(1)void(2)静态全局变量,static(3)函数重载(4)inline(5)递归函数(6)宏定义命令,文件包含命令,条件编译命令2.判断题(1)错(2)错(3)错(4)错(5)错(6)对(7)错(8)错(9)对(10)对3.读程序写结果(1)x=7,y=4x=9,y=5(2)34.56101(3)162228(4)12 15 18 21 24课后习题答案以及代码(5)2,1,4,1,3,2,1,4.简答题5.编程题(略)(略)第5章1.选择题构造数据类型(1)C (2)D (3)A (4)B (5)C 2.判断题(1)错(2)对(3)对(4)错(5)错3.读程序写结果(1)153(2)422 5 6 8 10(3)__,21(4)419(5)6904(6)43214.编程题(略)第6章1.填空题(1)类,对象,类(2)数据成员,成员函数(3)不能(4)private,protected,public,private (5)成员函数类和对象课后习题答案以及代码(6)friend(7)类名,作用域运算符(8)对象名.成员名,指针变量名-成员名,(*指针变量名).成员名(9)构造,析构,构造,析构(10)常量数据,引用数据(11)全局,数据类型,所属的类(12)常成员,只读(13)成员,友元(14)类数据成员,类成员函数(15)this(16)浅拷贝2.选择题(1)C (2)C (3)B (4)C (5)B(6)C (7)D (8)B (9)C (10)D(11)A (12)C (13)D (14)D (15)B3.改错题(1)man1.salary=1000.00; 不能在类外访问类的私有成员(2)float r=0;和float c=0; 类本身是抽象的,不能在类的定义体中给其数据成员赋值}后缺少分号“;”(3)成员函数void setdata(float x1,float y1,float r);没有实现(4)构造函数名point()应与类名同名,为Point没有头文件包含#include iostream.h4.读程序写结果题(1)x=0,y=0x=100,y=200(2)x=100,y=200x=1000,y=2022年t=3.14(3)Sta::fun2()=10s.fun2()=11r.a=20(4)Constructor1 called!x=0Constructor2 called!x=100Destructor called!Destructor called!(5)课后习题答案以及代码575.简答题6.编程题(略)(略)第7章1.填空题(1)继承(2)基类,派生类(3)private,protected,public,private (4)不可访问,保护,公有(5)私有(6)单(一),多(重)(7)赋值兼容规则(8)静态,动态(9)抽象类2.选择题继承和派生(1)B (2)A (3)B (4)C (5)B (6)A (7)D (8)B (9)B (10)B(11)D (12)B3.改错题(1)本题的错误主要是数据成员的访问权限问题:基类的私有成员在派生类中不可访问,如fb()函数中的a3=30;语句;类的私有和保护成员在类外不能访问,如main函数中的x.a2 =20;.a3=30; ,y.a2=200; ,y.a3=300; ,y.b2=2022年;和y.b3=3000;语句。
C++练习题一、掌握递归调用:任何有意义的递归调用总是由两部分组成的,即递归公式与递归结束条件。
递归函数设计的一般形式是:函数类型递归函数名f (参数x ){if(满足结束条件)结果=初值;else结果=含f(x-1)的表达式;返回结果;}例题:书P81例4-12,例4-13,二、掌握冒泡排序法算法:如果一个数组b,有n个数,则要进行n-1趟比较,在第一趟中要进行n-1次两两比较,在第j趟中要进行n-j次两两比较,冒泡排序的算法如下边:void bubble ( int b[ ], int n){for ( int i=0; i<n-1;n++ );for ( int j=0;j<n-1-i ; j++);if ( b[j]<b[i] ){int t=b[j];b[j]=b[j+1];b[j+1]=t;}}例题:书P143例7-3三、掌握二维数组的应用例题:书P146例7-4,例7-6四、练习1.C++中两个逻辑常量是什么?(true,false)C++语言和C语言的不同点(C++为面向对象程序设计,C为面向过程程序设计或称结构化程序设计)。
2.C++语言的具有抽象、封装、继承、多态的特点,理解每个特点的意思(课本P3-P4)3.表达式中不同类型的数据进行混合运算时,不同类型数据的转换顺序。
比如10+a+x*y,其中a为float型,x为int型,y为double型,那么整个表达式的值是什么类型?(double型)4.复合的赋值运算符(a+=b、x*=y+8、%=)的用法a+=b 相当于a=a+bx*=y+8 相当于x=x*(y+8)a%=b 相当于a=a%b5.在类中声明一个友元函数的格式?比如viod fun()函数是类A的友元函数。
友元函数的限定词:friend例: friend viod fun()6.熟悉三目运算符(?:)(课本P47)、自增(++)自减(--)的用法格式:关系表达式?表达式1:表达式2功能:当关系表达式的值为真,结果为表达式1的值,关系表达式的值为假,结果为表达式2的值例:若有定义”int x=4,y=5;”,则表达式”y>x++?x--:y++”的值为( C )A) 3 B) 4 C) 5D) 6《习题与指导》P5 第27-32题,自增自减: 《习题与指导》P4第17题7.三个循环语言(for、while、do…while)的用法,给定条件后,会判断循环次数。
C++习题3(继承和多态)C++习题3(继承和多态)一、选择题1、在C++中,类与类之间的继承关系具有( C )A)自反性 B)对称性 C)传递性 D)反对称性2、在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( B )A)受限制 B)保持不变 C)受保护 D)不受保护3、按解释中的要求在下列程序划线处填入的正确语句是:( C )#include class Base{public:void fun(){cout<<"Base::fun"<<=""> fun()cout<<"Derived::fun"<fun();4、在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限( C )A)受限制 B)保持不变 C)受保护 D)不受保护5、在哪种派生方式中,派生类可以访问基类中的protected 成员(B )A)public和private B)public、protected和private C)protected和private D)仅protected6、当一个派生类仅有protected继承一个基类时,基类中的所有公有成员成为派生类的(C)A)public成员 B)private成员 C)protected成员 D)友元7、不论派生类以何种方法继承基类,都不能使用基类的(B )A)public成员 B)private成员 C)protected成员 D)public成员和protected成员8下面叙述错误的是(S )。
A )基类的protected成员在派生类中仍然是protected的 B)基类的protected成员在public派生类中仍然是protected的C)基类的protected成员在private派生类中是private的 D)基类的protected 成员不能被派生类的对象访问9、下列说法中错误的是(S )。
《C#程序设计》习题集班级:__________________学号:__________________姓名:__________________2013年3月第1章.NET平台与Visual Studio 2008开发工具一、选择:1. 下列语句在控制台上的输出是什么?( b )static void Main(string[] args){if (true)System.Console.WriteLine("FirstMessage");System.Console.WriteLine("SecondMessage");}a) 无输出 b)FirstMessage c)SecondMessage d)FirstMessageSecondMessage2. C#中导入某一命名空间的关键字是( B )。
a) use b) using c)include d) import3. C#源程序文件的拓展名是(D)A、vbB、cC、cppD、cs4.以下程序的输出结果是(D)string str="b856ef10";string result="";for(int i=0;str[i]>='a' && str[i]<='z';i+=3){result =str[i]+result;Console.WriteLine(result);}A、10fe658bB、febC、10658D、b5. Visual 开发平台是(B)公司提供的.NET应用程序集成开发工具。
A)Borland B)Microsoft C)Intel D)IBM 6.在Visual 窗口,(B )窗口显示了当前Visual Studio解决方案的树型结构。
A.类视图 B. 解决方案资源管理器 C. 资源视图 D. 属性7.在C#中,引用命名空间System的正确语句是( A )ing System;B.# import <System>;es System;D.# include <System>;二、填空:1.在C#程序中,程序的执行总是从(Main )方法开始的2.可使用Console类的(ReadLine )方法,在控制台程序运行时输入信息。
面向对象程序设计习题-填空题1.在计算机中书写C++语言程序需要用到(编辑器)程序。
2.(链接程序)将编译器输出和各种库函数结合起来,可产生可执行程序。
3.C++语言是面向(对象)的语言。
4.C语言是广为人知的(UNIX )操作系统语言。
5.唯一能让计算机直接理解的语言称为计算机的(机器语言)。
6.面向结构的程序设计方法主要由以下3种逻辑结构组成:顺序结构、(循环结构)和(选择结构)。
7.面向对象的程序设计达到了软件工程的3个目标,即(重用性)、灵活性和扩展性。
8.面向对象系统最主要的特性是(封装性)、(继承性)和多态性。
9.(继承)机制为程序提供了一种组织、构造和重用类的手段。
10.(多态)指对象接收到不同消息时产生不同的行为方式。
11.每一个C++语言程序从(main )函数处开始执行。
12.每个函数体从({)开始,从(})结束。
13.每个C++语言语句以(; )结束。
14.(cin )对象通过键盘输入值。
15.(// )用于为程序做单行注解,提高程序的可读性。
16.(cout )用于在屏幕上打印信息。
17.C++语言使用运算符“<<”和“>>”分别实现(输入)和(输出)。
18.预处理器指令以(# )符号开头。
19.标准命名空间可以简写成为(std )。
20.为了使用C++语言的标准字符串类,必须要包含头文件(string )。
21.布尔型是最简单的数据类型,它有两种表示形式:(true )和(false )。
22.声明枚举的关键字是(enum )。
23.C++语言的数据类型十分丰富,包括基本数据类型、(派生类型)和(类类型)。
24.按照存储空间,整型又可分为短整型、(整型)和(长整型)。
25.C++语言中的(sizeof )运算符,可以用来计算一个特定对象或类型存储时需要的字节数。
26.浮点类型取值范围的定义包含在标准头文件(climits )中。
27.在程序运行过程中,有些值会保持不变,称之为(常量)。
C++程序设计练习题C++程序设计实验(下)练习题⼀、类与对象1.定义⼀个名为Rectangle的矩形类:(1)数据成员为矩形的长Len和宽Wid;(2)定义有参构造函数;(3)两个成员函数Area()和Length(),分别计算并输出矩形的⾯积和周长。
(4)定义主函数,创建⼀个Rectangle类对象:长为5,宽为2。
通过调⽤成员函数输出该矩形的⾯积和周长。
2.⽇期类。
定义⼀个⽇期类Cdate属性:⼀个包括年(year)、⽉(month)和⽇(day)三个整型私有数据成员。
⽅法:定义成员函数Setdate()设置⽇期、成员函数Isleapyear()判断是否为闰年、成员函数Print()输出⽇期。
定义主函数,对上述成员函数进⾏测试。
void main(){Cdate d1; //定义对象d1.Setdate(1999,12,30); //通过对象访问成员if (d1. Isleapyear())cout<<“闰年”;elsecout<<“⾮闰年!”;d1.Print();}3.员⼯问题1.定义⼀个⽇期类Date(1)私有数据成员包括:年(int year)、⽉(int month)、⽇(int day);(2)定义构造函数:Date(int _year, int _month, int _day),对数据成员进⾏初始化;(3)定义成员函数void print() const,打印⽇期信息(打印格式:年/⽉/⽇)。
2.定义⼀个员⼯类Employee(1)私有数据成员包括:姓名(char *name)、出⽣⽇期(Date birth)、⽉⼯资(double salary);(2)定义构造函数:Employee(char *_name, int year, int month, int day, double _salary),对数据成员进⾏初始化;(3)定义析构函数:~Employee(),释放堆空间;(4)定义成员函数double computSalary(double bonus) const,计算员⼯年薪(计算公式:12×⽉⼯资+年终奖),其中参数bonus为年终奖;(5)定义成员函数void print() const,打印员⼯信息,打印格式如下图所⽰。
《C#程序设计》期终复习试题2一、二、单项选择题1.C#源程序文件的拓展名是()A vbB cC cppD cs2.C#的数据类型有()A 值类型和调用类型B 值类型和引用类型C 引用类型和关系类型D 关系类型和调用类型3.下列关于异常的描述正确的是()A在C#中一个try块只能有一个catch块B一个try块可能产生多个异常C可以使用throws回避方法中的异常D finally块是异常处理所必需的#程序中的类myClass中的成员变量var1如下:public class myClass{private int var1;}则可以访问var1的有()。
A在myClass类中 B myClass的继承类C myClass的父类D 和myClass在同一命名空间下的类5.在C#程序中,使用关键字()来定义静态成员。
A mallocB classC privateD static6.在.NET中,()类提供了操作字符串的方法。
A CB D7.在C#程序中,如果类B要继承类A,类B正确的定义为()。
A public classB inherit AC public class B :: AB public class B : A D public class B from A8.下面关于C#中值类型和引用类型的描述正确的是()。
A 结构属于引用类型B字符串属于值类型C 所有内置的数据类型都是值类型,所有用户定义的数据类型都是引用类型D 值类型变量直接存放真正的数据,引用类型变量存放的是指向真正数据的内存地址Student{string type = ”学员”;internal string name = ”李明”;}public class Test{static void Main(){Student stu = new Student();列语句在控制台上的输出是多少? ( )string msg = @”Hello\nWorld!”;A Hello\nWorld!B @”Hello\nWorld!”C Hello World!D HelloWorld!11.将变量从字符串类型转换为数值类型可以使用的类型转换方法是( )。
第2章类和对象一、选择题1、()不是构造函数的特征。
A、构造函数的函数名与类名相同;B、构造函数可以重载;C、构造函数可以设置缺省参数;D、构造函数必须指定类型说明。
2、下列关于构造函数的描述中,()是正确的。
A、构造函数可以设置缺省参数;B、构造函数可以被继承;C、构造函数可以对静态数据成员进行初始化;D、构造函数可以说明为虚函数;3、()是析构函数的特征。
A、析构函数可以有一个或多个参数;B、析构函数名与类名不同;C、析构函数的定义只能在类体内;D、一个类中只能定义一个析构函数;4、定义析构函数时,应该注意()。
A、其函数名与类名完全相同;B、函数返回类型是void类型;C、无形参,也不可重载;D、函数体中必须有delete语句;5、下列静态数据成员的特性中,()是错误的。
A、说明静态数据成员时前边要加修饰符static;B、静态数据成员要在类体外进行初始化;C、静态数据成员不是所有对象所共用的;D、引用静态数据成员时,要在其名称前加<类名>和作用域运算符;6、友元的作用是()。
A、提高程序的运用效率;B、加强类的封装性;C、实现数据的隐藏性;D、增加成员函数的种类;7、关于成员函数特征的下列描述中,()是错误的。
A、成员函数一定是内联函数;B、成员函数可以重载;C、成员函数可以设置缺省参数值;D、成员函数可以是静态的;8、已知:print()函数是一个类的常成员函数,它无返回值,下列表示中,()是正确的;A、void print() const;B、const void print();C、void const print();D、void print(const);9、在()情况下适宜采用inline定义内联函数。
A、函数体含有循环语句;B、函数体含有递归语句;C、函数代码小,频繁调用;D、函数代码多,不常调用;10、假定AB为一个类,则执行“AB a(4) , b[3] , * p[2] ;”语句时,自动调用该类构造函数的次数为( )。
第八章继承与多态习题一.基本概念与基础知识自测题8.1填空题8.1.1 如果类α继承了类β,则类α称为(1)类,而类β称为(2)类。
(3)类的对象可作为(4)类的对象处理,反过来不行,因为(5)。
如果强制转换则要注意(6)。
答案:(1)基类(2)派生类(3)派生类(4)基类(5)派生类有一些新成员(6)只能派生类强制转换为基类8.1.2 当用public继承从基类派生一个类时,基类的public成员成为派生类的(1)成员,protected成员成为派生类的(2)成员,对private成员是(3)。
公有派生可以使其类的(4),所以公有派生是主流。
答案:(1)public成员(2)protected成员(3)不可访问(4)接口不变8.1.3 利用继承能够实现(1)。
这种实现缩短了程序开发的时间,VC++中的(2)很好地体现了这一点。
答案:(1)代码的复用(2)MFC编程8.1.4 一个派生类只有一个直接基类的情况称为(1),而有多个直接基类的情况称为(2)。
继承体现了类的(3)概念,这在MFC中得到了很好表现,MFC中只采用了(4)。
答案:(1)单继承(2)多重继承(3)层次(4)单继承8.1.5 C++中多态性包括两种多态性:(1)和(2)。
前者是通过(3)实现的,而后者是通过(4)和(5)来实现的。
答案:(1)编译时的(2)运行时的(3)函数和运算符的重载(4)类继承关系(5)虚函数8.1.6 在基类中将一个成员函数说明成虚函数后,在其派生类中只要(1)、(2)和(3)完全一样就认为是虚函数,而不必再加关键字(4)。
如有任何不同,则认为是(5)而不是虚函数。
除了非成员函数不能作为虚函数外,(6)、(7)和(8)也不能作为虚函数。
答案:(1)同虚函数名(2)同参数表(3)同返回类型。
如基类中返回基类指针,而派生类中返回派生类指针是允许的(4)virtual(5)重载(6)静态成员函数(7)内联函数(8)构造函数8.1.7 纯虚函数定义时在函数参数表后加(1),它表明程序员对函数(2),其本质是将指向函数体的指针定为(3)。
c类的继承和多态例子继承是面向对象编程中的重要概念之一,它允许一个类“继承”另一个类的属性和方法。
在C++中,继承分为三种类型:公有继承、私有继承和保护继承。
其中,公有继承是最常用的一种方式,也是实现多态的基础。
本文将通过一个例子来介绍C++中的公有继承和多态特性。
假设我们要设计一个动物园的系统,其中包含不同类型的动物。
首先,我们定义一个基类Animal,代表所有动物的共有属性和方法。
然后,派生出几个具体的动物类,如Lion(狮子)、Elephant (大象)和Monkey(猴子),它们都是Animal类的派生类。
1. 基类Animal的定义:```c++class Animal {public:Animal() {} // 构造函数virtual ~Animal() {} // 虚析构函数virtual void move() const = 0; // 纯虚函数,用于表示不同动物的移动方式protected:int age; // 年龄double weight; // 体重};```2. 派生类Lion的定义:```c++class Lion : public Animal {public:Lion(int a, double w) : Animal(), color("yellow") { age = a;weight = w;}void move() const {std::cout << "Lion is running." << std::endl;}private:std::string color; // 颜色};```3. 派生类Elephant的定义:```c++class Elephant : public Animal {public:Elephant(int a, double w) : Animal(), height(3.5) { age = a;weight = w;}void move() const {std::cout << "Elephant is walking." << std::endl; }private:double height; // 身高};```4. 派生类Monkey的定义:```c++class Monkey : public Animal {public:Monkey(int a, double w) : Animal(), num_bananas(5) {age = a;weight = w;}void move() const {std::cout << "Monkey is jumping." << std::endl;}private:int num_bananas; // 香蕉数目};```以上就是实现动物园系统的基本类定义。
UML 系统建模基础教程课后答案第一章面向对象设计与UML1.填空题(1)UML(2)封装继承多态(3)继承(4)瀑布模型喷泉模型基于组件的开发模型XP 开发模型2. 选择题(1)C(2)A B C D(3)A B C D(4)A B C(5)A1.试述对象和类的关系。
(1)类是具有相同或相似结构、操作和约束规则的对象组成的集合,而对象是某一类的具体化实例,每一个类都是具有某些共同特征的对象的抽象。
类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类.类描述了一组有相同特性和相同行为的对象。
第二章UML 通用知识点综述(1)依赖泛化关联实现(2)视图图模型元素(3)实现视图部署视图(4)构造型标记值约束(5)规格说明修饰通用划分2. 选择题(1)D(2)C(3)A(4)A B(5)D(6)1)在UML 中面向对象的事物有哪几种?在UML 中,定义了四种基本的面向对象的事物,分别是结构事物、行为事物、分组事物和注释事物等。
(7)2)请说出构件的种类。
构件种类有:源代码构件、二进制构件和可执行构件。
(8)3)请说出试图有哪些种类。
在UML 中主要包括的视图为静态视图、用例视图、交互视图、实现视图、状态机视图、活动视图、部署视图和模型管理视图。
(9)4)请说出视图和图的关系。
视图和图是包含和被包含的关系。
在每一种视图中都包含一种或多种图。
(10)5)请简述UML 的通用机制。
UML 提供了一些通用的公共机制,使用这些通用的公共机制(通用机制)能够使UML 在各种图中添加适当的描述信息,从而完善UML 的语义表达。
通常,使用模型元素的基本功能不能够完善的表达所要描述的实际信息,这些通用机制可以有效地帮助表达,帮助我们进行有效的UML 建模。
UML 提供的这些通用机制,贯穿于整个建模过程的方方面面。
前面我们提到,UML 的通用机制包括规格说明、修饰和通用划分三个方面。
第三章Rational 统一过程(11)1 )角色活动产物工作流(12)2 )逻辑视图过程视图物理视图开发视图用例视图(13)3)设计开发验证(14)4 )二维(15)5)周期迭代过程里程碑(16) A B C D(17) A C D(18) A C D(19) A B C(20) A B C D(21)1 )请描述迭代过程有几个阶段。
一、单项选择题1. 函数重载是指( A )。
A. 两个或两个以上的函数取相同的函数名,但形参的个数或类型不同B. 两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同C. 两个以上的函数名字不同,但形参的个数或类型相同D. 两个以上的函数取相同的函数名,并且函数的返回类型相同2. 下列对引用的陈述中不正确的是( C )。
A. 每一个引用都是其所引用对象的别名,因此必须初始化B. 形式上针对引用的操作实际上作用于它所引用的对象C. 一旦定义了引用,一切针对其所引用对象的操作只能通过该引用间接进行D. 不需要单独为引用分配存储空间3. 关于封装,下列说法中不正确的是( A )。
A. 通过封装,对象的全部属性和操作结合在一起,形成一个整体B. 通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)C. 通过封装,每个对象都成为相对独立的实体D. 通过封装,对象的属性都是不可见的4. 假定AA为一个类,a为该类公有的数据成员,px为指向该类对象的一个指针,则访问px所指对象中数据成员a的格式为( C )。
A. px(a)B. px[a]C. px->aD. px.a5. 假定AA为一个类,int a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为( A )。
A. int AA::a()B. int AA:a()C. AA::a()D. AA::int a()6. 类的构造函数是在定义该类的一个( C )时被自动调用执行的。
A. 成员函数B. 数据成员C. 对象D. 友元函数7.在公有派生情况下,有关派生类对象和基类对象的关系,不正确的叙述是( C )A.派生类的对象可以赋给基类的对象B.派生类的对象可以初始化基类的引用C.派生类的对象可以直接访问基类中的成员D.派生类的对象的地址可以赋给指向基类的指针8.对于类定义class A{public:virtual void func1( ){ }void func2( ){ }};class B:public A{public:void func1( ){cout<<〃class B func 1〃<<end1;}virtual void func2( ){cout<<〃class B func 2〃<<end1;}};下面正确的叙述是( C ) A、 A::func2( )和B::func1( )都是虚函数B、A::func2( )和B::func1( )都不是虚函数C、 B::func1( )是虚函数,而A::func2( )不是虚函数D、B::func1( )不是虚函数,而A::func2( )是虚函数9. 对于int *pa[5];的描述,(D )是正确的。
第4章继承与多态一.选择题1. 编译和运行以下两文件结果是( D )。
//文件P1.javapackage MyPackage;class P1{void afancymethod(){System.out.println("What a fancy method");}}//文件P2.javapackage YourPackage;import MyPackage.*;public class P2 extends P1{public static void main(String argv[]){P2 p2 = new P2();p2.afancymethod();}}A.两个均通过编译,P2运行时输出What a fancy methodB.没一个通过编译C.两个均通过编译,但P2运行时出错D.P1 通过编译,但P2出现编译错误2.下列程序运行的结果是(A )。
package a;package b;public class D{public static void main(String args[]) {System.out.println("^_^,今天心情不错!");}}A.出现编译错误B.^_^,今天心情不错!C.通过编译,运行时出错D.以上都不对3.Java的核心类库中哪个包,Java系统能自动引入(B )。
A.java.io B.ngC. D.java.util4.下列程序运行结果是( A )。
private class Base{Base(){int i = 100;System.out.println(i);}public class Pri extends Base{static int i = 200;public static void main(String argv[]){Pri p = new Pri();System.out.println(i);}}A.编译错误B.200 C.100 200 D.1005.下列程序运行结果是(C )。
一、填空题++中有两种数据类型:( char )和( int long )可以使用signed修饰符。
在C++中,用数组、指针、和( 引用 )作为函数参数,能够将参数值带回。
2.为了降低函数调用的时间开销,建议将小的调用频繁的函数定义为(内联函数),方法是在函数类型前加上(inline)关键字。
3.面向对象的程序设计有四大特征,它们是抽象、封装、( 继承 )、( 多态 )。
4.拷贝构造函数是在用一个对象初始化另一个对象时被调用,系统缺省的拷贝构造函数的工作方法是( 把对象的每个数据成员的值都复制到新建立的对象中)。
5.用new申请某一个类的动态对象数组时,在该类中必须能够匹配到(该类的)构造函数,否则应用程序会产生一个编译错误。
6.静态数据成员必须在类外进行初始化,且静态数据成员的一个拷贝被类的所有对象( 共享 )。
7.在C++中,定义重载函数时,应至少使重载函数的参数个数或参数类型( 不同 )。
8.在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向对象程序设计的( 封装 )特性。
9.预编译指令由三种,它们是:文件包含、( 宏定义 )和( 条件编译 )。
10.静态的成员函数没有隐含的( this ),所以,它们只能直接访问类的静态的数据成员。
11.在C++中,函数的参数有两种传递方式,它们是值传递和( 地址 )。
12.当非静态成员函数被调用时,该成员函数的( this )指向调用它的对象。
13.拷贝构造函数使用( 引用 )作为参数初始化创建中的对象。
14.在公有继承的情况下,基类数据成员在派生类中的访问权限( 不变 )。
15.在C++中,构造派生类对象时,总是先从( 基类 )的初始化开始的。
16.当需要统计程序中某个类创建对象的个数时,需要给该类定义(静态数据)成员。
17.在多个类之间有重复继承时,为避免被重复继承的基类数据成员在内存中有多个拷贝,应将该基类定义为(虚基类)。
一、选择题1. 在C++中,类与类之间的继承关系具有(C )A)自反性B)对称性C)传递性D)反对称性2. 在公有继承的情况下,基类的成员(私有的除外)在派生类中的访问权限(BA)受限制B)保持不变C)受保护D)不受保护3. 按解释中的要求在下列程序划线处填入的正确语句是:(C )#in elude <iostream.h>class Base{ public:void fun(){cout<v"Base::fun"<<endl ;}};class Derived:public Base{public :void fun (){ _______ // 在此空格处调用基类的函数fun()cout<<"Derived::f un "<<e ndl ;}};A)fu n(); B)Base.fu n(); C)Base::fu n ();D)Base->fun();4. 在保护继承的情况下,基类的成员(私有的除外)在派生类中的访问权限(C )A)受限制B)保持不变C)受保护D)不受保护5. 在哪种派生方式中,派生类可以访问基类中的protected 成员(B )A)public 禾口private B)public 、protected 禾口privateC)protected 禾口private D)仅protected6. 当一个派生类仅有protected继承一个基类时,基类中的所有公有成员成为派生类的(C)A) public 成员B) private 成员C) protected成员D) 友元7. 不论派生类以何种方法继承基类,都不能使用基类的(B )A) public 成员B) private 成员C) protected 成员D) public 成员和protected 成员8 下面叙述错误的是( S )。
A) 基类的protected 成员在派生类中仍然是protected 的B) 基类的protected 成员在public 派生类中仍然是protected 的C) 基类的protected 成员在private 派生类中是private 的D) 基类的protected 成员不能被派生类的对象访问9. 下列说法中错误的是( S )。
A) 保护继承时基类中的public 成员在派生类中仍是public 的B) 公有继承时基类中的private 成员在派生类中仍是private 的C) 私有继承时基类中的public 成员在派生类中是private 的D) 保护继承时基类中的public 成员在派生类中是protected 的10下面叙述错误的是( C)。
A) 派生类可以使用private 派生B) 对基类成员的访问必须是无二义性的C) 基类成员的访问能力在派生类中维持不变D) 赋值兼容规则也适用于多继承的组合11派生类的构造函数的成员初始化列表中,不能包含(C )。
A) 基类的构造函数B) 派生类中子对象的初始化C) 基类中子对象的初始化D) 派生类中一般数据成员的初始化12. 下列虚基类的声明中,正确的是: ( B )A)class virtual B: public A B)class B: virtualpublic AC)class B: public A virtual D)virtual class B:public A13..实现运行时的多态性采用(D )A)重载函数B)构造函数C)析构函数D)虚函数14. 若一个类中含有纯虚函数,则该类称为(D )A)基类B)纯基类C)派生类D)抽象类15. 假设A为抽象类,下列声明(B )是正确的A) A fun(in t); B) A *p; C) int fun (A); D) A Obj;16. 在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值(B)A)不同B)相同C)相容D)部分相同17. 下面函数原型声明中,(C)声明了fun为普通虚函数A) void fun()=0; B) virtual void fun()=0;C) virtual void fun(); D) virtual void fun(){};18. 在下面四个选项中,(A)是用来声明虚函数的。
A)virtual B)public C)usi ng D)false19. 实现运行时的多态性要使用(D)。
A)重载函数B)构造函数C)析构函数D)虚函数20. 关于虚函数的描述中,正确的是(D)。
A)虚函数是一个静态成员函数B)虚函数是一个非成员函数C)虚函数既可以在函数说明时定义,也可以在函数实现时定义D)派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型二、填空题:1. 派生类对基类的继承有三种方式:_public_ __ 、_protected __ __ 和__private __ __ 。
2. 如果类Alpha继承了类Beta,则类Alpha称为__派生——类,类Beta称为__基 _类。
3. 设置虚基类的目的是为了消除二义性,可通过_virtual 标识虚基类。
4. 类继承中,缺省的继承方式是private ___________ 。
5. 当用protected 继承从基类派生宀个类时,基类的public 成员成为派生类的protected ___________ 员,protected 成员成为派生类的_ protected _ ________ 成员。
6 •指向基类的对象的指针变量也可以指向公有派生类的对象。
二、程序题1. 继承的工作方式,完成以下代码。
要求: (1)处继承方式为共有继承public , (2)处填写基类的ai , (3)处填写派生类的bi , (4)对象b的数据成员有哪些?ai,bi#i nclude<iostream.h>#i ncludevstri ng.h>class A{public:A(){ai=1;}protected:int ai;};class B: _____ A{public:B(){bi=2;}void display(){cout<< ___ (2) ___ <<(3)_ <<e ndl;}private:int bi;};int mai n(){B b;b.display();}2. 派生类的构造。
派生类的构造总是由基类的初始化开始的。
效果是:#i nclude<iostream.h> class A{ public:A(int i){x=i; cout<<"CA:"<<x<<endl;} 〜A(){cout<v"DA"vve ndl;} private: int x;};class B:public A{ public:B():_ A(90) {y=O;cout<v"CB"vvendl;}〜B(){cout<<"DB"<<e ndl;} private:int y;};int mai n(){B b;}3. 填写初始化列表,完成以下程序,使得屏幕输出:#i nclude<iostream.h> class A{ public:A(i nt i){x=i; cout<<x<<e ndl;} private: int x;class D{ public:D(i nt i){m=i;cout<<m<<e ndl;}private: int m;}; class B:public A{ public:B():_ A(90),d(19) {y=o;} private: int y;D d;};int mai n(){B b;}4. 请问以下程序输出什么?#i nclude<iostream.h> class A{ public:A(i nt i){x=i;} int x;};class B:public A{ public:B(int i):A(i+1){y=i;} int y;};void f1(A & ra){coutvvra.xvve ndl;}void f2(A * pa){cout<<pa->x<<e ndl;}int mai n()B b(3); f1(b); f2(&b);4答案:5. 请问以下程序输出什么?#i nclude<iostream.h>class A{public:void display(){cout<v"A"v<e ndl;} };class B:public A{public:void display(){cout<v"B"v<e ndl;} };void f(A &r){r.display();}int mai n(){B b;f(b);A a;f(a);6. 多态性,虚函数。
请问以下程序输出什么?#i nclude<iostream.h>class A{public:virtual void display(){cout<v"A"v<e ndl;} };class B:public A{public:virtual void display(){cout<<"B"<<e ndl;} };void f(A &r){r.display();}int mai n(){B b;f(b);A a;f(a);}6. 答案: 17. 请问以下程序输出什么?#i nclude<iostream.h>class A{public:virtual void display(){cout<<"A"<<e ndl;} };class B:public A{public:virtual void display(){cout<<"B"<<e ndl;} };class C:public A{public:virtual void display(){cout<v"C"v<e ndl;} };int mai n(){A a,aa;B b;C c,cc,ccc;A *pa[6]={&a,&aa,&b,&c,&cc, &ccc}; int i=0;for(i=0;i<6;++i)pa[i]->display();8.以下程序的屏幕输出是为何以下程序的屏幕输答案:出中会输出DA呢?请说明#in clude<iostream.h>class A{public:〜A(){cout«"DA ";}};class B:public A{public:〜B(){cout«"DB ";}};int mai n(){B b;}答案:定义类B对象b时,先调用基类A的构造函数,再调用派生类类B的构造函数。