c类的继承编程练习

合集下载

c练习题(带答案)

c练习题(带答案)

一、选择题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++练习题(含答案)

C++练习题(含答案)

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++选择题练习

C++选择题练习

继承练习1.在派生类对基类继承的传递性中,C 是错误的。

(2分)A 在公有继承方式下,直接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员B 在公有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员C 在私有继承方式下,间接派生类对象可以直接调用基类中的公有成员函数,去访问基类的私有数据成员D 不管是私有继承还是公有继承,基类中的私有成员在派生类的作用域内都是不可能见的。

2.下列有关继承和派生的叙述中,正确的是:C (2分)A 派生类不能访问通过私有继承的基类的保护成员B 多继承的虚基类不能够实例化C如果基类没有默认构造函数,派生类就应当定义带形参的构造函数D 类的的析构函数和虚函数都不能够被继承,需要在派生类中重新实现第一次上机课3.设x和y均为bool量,则x&&y为真的条件是(A)。

(2分)A它们均为真B其中一个为真C它们均为假D其中一个为假4.设int x;,则经过(C)后,语句*px=0;可将x值置为0。

(2分)A int * px;B int const * px=&x;C int * const px=&x;D const int * px=&x;第三次上机课2-1在以下哪种情形,复制构造函数会被调用。

( B )(2分)A当一个对象采用引用方式,作为参数传递给一个函数B当一个函数采用值方式,返回一个对象C当一个对象赋值给另一个对象D以上答案都不对2-2对于以下关于友元的说法(D)(2分)A如果函数fun被声明为类A的友元函数,则该函数成为A的成员函数B如果函数fun被声明为类A的友元函数,则该函数能访问A的保护成员,但不能访问私C如果函数fun被声明为类A的友元函数,则fun的形参类型不能是A。

D以上答案都不对2-3对于类之间的友元关系:(D)(2分)A如果类A是类B的友元,则B的成员函数可以访问A的私有成员B如果类A是类B的友元,则B也是A的友元。

继承练习题

继承练习题

继承练习题一、选择题1. 关于Java中的继承说法正确的是:A. 子类可以继承父类的私有成员B. 子类可以继承父类的protected成员C. 子类可以继承父类的静态成员D. 子类不能继承父类的构造方法2. 在Java中,下列哪个关键字用于声明继承?A. extendsB. implementsC. interfaceD. class3. 如果一个类声明为final,那么它:A. 可以被继承B. 不能被继承C. 可以被实例化D. 不能被实例化4. 关于Java中的方法重写,下列说法正确的是:A. 重写的方法必须具有相同的返回类型B. 重写的方法可以有不同的访问权限C. 重写的方法可以抛出新的异常D. 重写的方法必须抛出与父类方法相同的异常5. 在Java中,下列哪个操作是不合法的?A. 子类覆盖父类的静态方法B. 子类覆盖父类的非静态方法C. 子类覆盖父类的私有方法D. 子类覆盖父类的protected方法二、填空题6. 在Java中,如果一个类没有明确指定继承哪个类,那么它默认继承______类。

7. 在Java中,使用______关键字可以实现对父类方法的重写。

8. 如果子类要调用父类的构造方法,可以使用______关键字。

9. 在Java中,子类可以______父类的成员变量和方法。

10. 在Java中,如果子类和父类都有相同的成员变量,那么在子类中访问这个变量时,默认访问的是______。

三、判断题11. 在Java中,一个类只能继承一个类,但可以实现多个接口。

()12. 子类可以继承父类的私有成员变量,但不能继承私有方法。

()13. 在Java中,子类必须显式调用父类的构造方法。

()14. 如果父类的构造方法有参数,那么子类的构造方法也必须有相同参数的构造方法。

()15. 在Java中,子类可以覆盖父类的静态方法。

()四、编程题16. 定义一个父类`Animal`,包含一个方法`makeSound()`。

C++程序设计高级课程考试

C++程序设计高级课程考试

C++程序设计高级课程考试(答案见尾页)一、选择题1. 以下关于C++语言的描述,哪个是正确的?A. C++是一种过程式编程语言。

B. C++支持面向对象编程。

C. C++的语法与Java完全相同。

D. C++标准库包含了多个常用功能模块。

2. 在C++中,下列哪个关键字用于声明函数的重载?A. namespaceB. usingC. overloadD. template3. C++中,下列哪个是引用类型的关键字?A. intB. floatC. doubleD. reference4. C++中,下列哪个关键字用于定义类?A. classB. structC. unionD. namespace5. 在C++中,下列哪个关键字用于实现数据封装?A. publicB. privateC. protectedD. friend6. C++中,下列哪个关键字用于指代静态成员变量?A. staticB. constC. virtualD. explicit7. C++中,下列哪个关键字用于结束一个类的定义?A. }B. ;C. }D. ;8. C++中,下列哪个关键字用于定义模板?A. templateB. classC. structD. union9. C++中,下列哪个关键字用于实现多态?A. virtualB. overrideC. finalD. static10. C++中,下列哪个关键字用于访问对象的成员?A. thisB. superC. friendD. template11. 在C++中,以下哪个关键字用于定义函数?A. voidB. staticC. constD. virtual12. C++中,以下哪个关键字用于指针?A. intB. floatC. charD. unique_ptr13. C++中,以下哪个关键字用于实现数据封装?A. publicB. privateC. protectedD. friend14. 在C++中,以下哪个运算符用于赋值操作?A. =B. +=C. !=D. %15. C++中,以下哪个关键字用于声明变量?A. intB. floatC. charD. bool16. C++中,以下哪个关键字用于限制类成员的访问权限?A. publicB. privateC. protectedD. friend17. C++中,以下哪个关键字用于表示类的模板?A. templateB. classC. structD. union18. C++中,以下哪个关键字用于创建抽象类?A. abstractB. finalC. overrideD. static19. C++中,以下哪个关键字用于结束异常处理?A. tryB. catchC. finallyD. throw20. 在C++中,以下哪个关键字用于声明函数重载?A. usingB. using namespaceC. friendD. template21. 在C++中,以下哪个关键字用于定义类?A. classB. structC. unionD. enum22. 在C++中,以下哪个关键字用于指针?A. intB. doubleC. charD. pointer23. 在C++中,以下哪个关键字用于实现模板?A. templateB. friendC. usingD. struct24. 在C++中,以下哪个关键字用于声明变量为常量?A. constB. defineC. staticD. const_25. 在C++中,以下哪个关键字用于定义函数模板?A. templateB. friendC. usingD. struct26. 在C++中,以下哪个关键字用于表示数组的长度?A. int arr[5]B. int arr[5] = {1, 2, 3, 4, 5}C. int arr[] = {1, 2, 3, 4, 5}D. int* arr = new int[5]27. 在C++中,以下哪个关键字用于抛出异常?A. tryB. catchC. throwD. finally28. 在C++中,以下哪个关键字用于访问对象的成员?A. thisB. superC. friendD. virtual29. 在C++中,以下哪个关键字用于结束程序的执行?A. endB. exitC. quitD. return30. 在C++中,哪个关键字用于声明一个常量?A. constB. staticC. const_castD. dynamic_cast31. C++中,哪种数据类型可以存储用户的输入数据?A. intB. doubleC. stringD. char32. C++中,哪个运算符用于实现位左移操作?A. <<B. >C. %D. /33. 在C++中,哪个关键字用于表示抽象类?A. abstractB. finalC. overrideD. friend34. C++中,哪个运算符用于比较两个数值的大小?A. ==B. !=C. <D. >35. 在C++中,哪个关键字用于限定函数的访问权限?A. publicB. protectedC. privateD. internal36. C++中,哪种数据结构可以实现数据的快速插入和删除操作?A. 链表B. 栈C. 队列D. 布隆过滤器37. 在C++中,哪个关键字用于定义类的成员函数?A. funcB. methodC. functionD. member_func38. 在C++中,以下哪个关键字用于声明函数的可重载性?A. virtualB. overrideC. friendD. static39. 在C++中,以下哪个关键字用于定义类的成员函数?A. voidB. staticC. virtualD. friend40. C++中,以下哪个运算符用于实现位左移操作?A. <<B. >C. <D. =41. 在C++中,以下哪个关键字用于指代静态成员变量?A. staticB. constC. virtual42. C++中,以下哪个关键字用于表示类的构造函数?A. classB. structC. unionD. enum43. 在C++中,以下哪个运算符用于实现乘法运算?A. +=B. !=C. *D. %44. C++中,以下哪个关键字用于定义类的析构函数?A. ~B. publicC. privateD. protected45. 在C++中,以下哪个关键字用于声明类的私有成员?A. publicB. privateC. protectedD. friend46. C++中,以下哪个关键字用于定义常量对象?A. constB. finalC. staticD. explicit47. 在C++中,以下哪个关键字用于实现类的抽象类?A. abstractB. virtualD. override二、问答题1. 什么是C++程序中的类和对象?它们之间有什么区别?2. C++中如何实现继承?请给出一个示例。

C++_II_练习题(2)

C++_II_练习题(2)

C++ II 练习题(2)一.单项选择题(每题2分,共20分)1.在C++中,有关类和对象正确说法是( A )。

A.对象是类的一个实例 B.对象是类的存储空间C.一个类只能有一个对象 D.类是程序包,对象是存储空间2.在类定义中,称为接口的成员是( C )。

A. 所有类成员B. private或protected的类成员C. public的类成员D. public或private的类成员3. 一个类的友员函数能够通过( D )访问该类的所有成员。

A.静态数据 B.析构造函数 C.this指针 D.类对象参数4. 下面描述错误的是( B )。

A.自定义构造函数应该是公有成员函数 B.构造函数可以是虚函数C.构造函数在建立对象时自动调用执行 D.构造函数可以重载5. 在类的继承关系中,基类的(B)成员在派生类中可见。

A. 所有B. public和protectedC. 只有publicD. 只有protected6.设B类是A类的派生类,有说明语句A a, *ap;B b, *bp;则以下正确语句是(C)。

A. a=b;B. b=a;C. ap=&b;D. bp=&a;7.C++中,以下( D )语法形式不属于运行时的多态。

A. 根据if语句的求值决定程序流程B. 根据基类指针指向对象调用成员函数C. 根据switch语句的求值决定程序流程D. 根据参数个数、类型调用重载函数8. 假设对A类定义一个重载“+”号运算符的成员函数,以便实现两个A类对象的加法,并返回相加结果,则该成员函数的函数原型为( B )。

A.A operator +( const A &A1, const A &A2 ); B.A A:: operator +( const A &A2 );C.A::operator +( A &A2 ); D.A A::operator +( );9. 一个类模板定义了静态数据成员,则( A )。

C++程序设计练习题

C++程序设计练习题

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,打印员⼯信息,打印格式如下图所⽰。

关于VC语言中类的继承与模板的实例分析

关于VC语言中类的继承与模板的实例分析
维普资讯
信息 科 学 Il ;

关于 V C语言中类的继承与模板的实例分析
( 盐城 工学院, 江苏 盐城 2 40 ) 20 0
摘 要: 的 承与 板 C 言中 难 和 点 在 入学 C 的 承 模板 帮 我 好学 好V. 并 行大 类 继 模 是V 语 的 点 重 。 深 习V 类 继 与 可 助 们更 鼍 c 语
Sa k me e : tc mb r . 可简化了程序设计方法 ,显著提高软件的重用 以下为具体步骤 : 3 ( ) 基类 Ln L tLn Ls的实现类 I I 一 设计 i i。 i i k s k t 性, 叉使得软 件更容易维护 。 派生则是继承的直 用链表结构实现。 要求 I2 I 接产物 , 通过继承 已有 的—个或多个类来生一 似于实验五中的队列类 , 1 () 个新类 , 通过派生可创建一种类族 。它的实现 , 链表类具有以下 功能: 1能够在链表的头尾增 I I l 2 方便 了更大规模 的软件开发。因而类 的继承与 加节点 以及在链表头删除节点( )能够记录链 IO 用静 态成员 )3 能返 回链表 中 的节 () 模板 在类 的学习 中极其重要。下面我们具体谈 表 的个数 ( 点个数( ) 4 能查看链 表头节点的元素值( ) 5 能告 谈类及类 的继承与模板 。 f 用多文 件结构实现 程序。三个类 的定 4 ) 6 在链 表 在 VC中,这种将数据与处理这些 数据 的 知链表是否 为能告知链表是否为 空( ) 7 在链 表类 的析 义放在一个头文件中 , 的实现放在另一个 源 类 函数封装成—个整体 , 就构成一个类。或者说 , 类 的构造 函数 中初始化链表 ( ) 类 是对一组性质相 同事物 的程序描述 ,它由描 构函数中释放链表所有元素的空间。下面给出 文件中。主程序用于测试你所设计的三个类 的 测试内容包括如下 :) 队列 中加入几 1在 述该类事 物的共 同特性 的数据和处理这些数据 链 表类 的类定 义 ,我 们可 据定义 完全 实现该 正确性 。 个元 素 , p nQ ee 打 印队列 内容 , 用 r t uu 0 i 然后 再 的函数组成 。 一个类 可以根据需要 生成派生类 。 类 。 从队列 中取 出这些元素 , 看是否 正确 2 在栈 中 ) , 用链表实现的列 表类 个 派生类又可 以作为另—个 类的基类 , 一个 , 加入几个 元素 , p nS e 0 印栈 的内容, 用 r tak打 i t 然 基类可 以派生出若干个 派生类 , 这样可 以构成 casLn Ls I ls ik i t 后再从栈中取 出这些元素 , 看是否正确 3 测试 ) 定义链表节点类 型 了类树 。 继承常用来表示类属关系。 当从 已有 的 , , 取 队列 长度 的 函数 gt uuL n t 的正确 性 e e e eg 0 Q h 类 中派生 出新的类时 , 可对派生类傲几种变化 : tpd fsrc nd I yee t t oe u n a 4 测试 判断栈 是否 为空 的函数 e p 0 ) m t 的正确 y ( )可全部或部分地继承基类 的成员数据或成 i t d m; 1 性。 员 函数( ) 2 可增加新 的成员变量 ( ) 3可增加新 的 src o e n x tu tn e d ( 实 现提示 四) 成员 函数( ) 4 可重定义已有的成员 函数( ) 5 可改 }Ls aa o e it t d ; D N ( 1 )链表类的实现可 以参考实验五中 队列 变现有的成员属性 。 c + 在 + 中有两种继承 : 单一 , 义链表类 型 , 定 y  ̄ it tNo i t t; 类 的实现 。()测试 程序可 以用如下程序 : 2 继承( 一个派生类仅 由一个 基类派生 ) 和多重继 tp fL sDaa d e L sDaa 衢 n l d < o te m.> c u e i sr a h 承 ( 一个 派生类 由两个或更多个基类所派生 ) p oe t d 。 rtce : 衔n l d ”i l s. ” c u e l dit n h 派生类继 承了基类 的所有方法 ,另外派生类 自 itc ut _ n on; I J 表中元素的个数 it t aa n ed aa i a ;表头 、 D Lk k l, 表 vi an 身还 可定义所 需要 的不包 含在 父类 中 的新 方 Ls aa d t i H a .dtLnT i, o m i0 I d 法。 而模板是 c + + 语言—个重要特征。 模板使程 尾 指 针 Q ee q u u l= nw Q ee e u u; Sa k * l : n w tc ; tc s e Sa k t i Ls o n;/ 表个数 ac t 7 序员快速 建立具有类型安全 的类库集合和函数 s t i C u t /4 cu o t<< ’ .lJLit: < Ln Litg t sNu ’0丑 ss“ < ik s: eLit m— 1 : 集合。 它的实现 。 方便 了更大规 模的软件开发 。 p b c uh: 模 板也是 c + + 语言支持参 数化多态性 的工具 。 Ln Lsvi) , 造 函 数 ik it o ; , ( d 构 bm < nl 腧 出总 的列表数 e <e d; 将一段程序所处理的对象类型参 数化,就可 以 vr a Ln Ls vi) 晰 构 函数 iul— ik i(od;, t t f iti: O o n r( ;j<4 i+ , 队列 和栈中加 ;+) , 在 使这段程序能够处理某个类型范围内的各种类 vi p tal ( tnwD t) od uTi i e a ;们笙 尾加入一个 入 元 素 n a 表 型 的对象 , 这就是参数化多态性 。 被参数化 的一 新 元素 f1 > n uu (; q - e Q eei ) 段程序将会处理一定 范围内的若 干种不 同类型 vi uH a itnwD t) od p ted( e a ;们笙 头插入一个 s一 ps(; n a 表 l > uhi ) 的对象 ,即对 于一定 范围内的若干不 同类型 的 新 元素 ) 对象 的某种 操作将对 应 着一个 相 同结构 的实 it e ed( i ; / n gt a v d / H o ) 从表头取 出一个元素 tu < ” u u lnt: < q - gtu u — o t< Q e e e g ” ‘ l >eQ e e h 现。 而模 板这种工具就是用来解决这个问题 的。 i ek ed o ); 看表头 元素的值 , n peHa( i , t vd 鹰 假定 L n t 0< nl , 出队列 长度和队列中元 eg <e d 墒 h ; 下面 可以通 过设计 一个基类 , 完成 队列 和 列表至少有一个 元素 素个数 栈共 同的功 能,然后分别派生 出队列类和栈类 bo m t ;/ ole py() / 检查列 表是 否空 q 一 pi Q e e ; 腧 出栈 的内容 l > r t uu0 n 这两个派生类 。 这样可减少代码 , 提高效率 。 设 i e l C u t ;, n gt e o n t E m 0 , 取列表元素个 数 cu < ”tc o :”< s- tp < ed; ot< S k tp a < l >o0 < nl 计 的基类也可 以用于派生 出其他类。本 实例要 s t n eLs u e0 , ti itgtit mbr ;, ac N 取列 表个 数 s一 pitte0 / 出队列和栈中的元素 l > r Sak ; / �
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验十六继承
1、实验目的
1)掌握继承的实现方法;
2)继承中常见问题的处理方法。

2、实验内容
1.分析下面的程序,指出程序运行的结果
#include<iostream.h>
classCBase
{public:
voidfn1();
};
voidCBase::fn1()
{cout<<"调用基类类的函数fn1()\n";
}
classCDerived:publicCBase
{
public:
voidfn1();
};
voidCDerived::fn1()
{cout<<"调用派生类的函数fn1()\n";
}
voidmain()
{
CDerivedd1;
CBase*pb=&d1;
CBase&pd=d1;
d1.fn1();
pb->fn1();
pd.fn1();
}
运行结果:
调用派生类的函数fn1()
调用基类类的函数fn1()
调用基类类的函数fn1()
2.2编写并调试程序:
1)分析下面程序,写出该程序的功能和运行结果
#include<iostream>
usingnamespacestd;
classA{
private:
inta;
public:
A()
{a=0;}
A(inti)
{a=i;}
voidPrint()
{cout<<a<<",";}
};
classB:publicA{
private:
intb1,b2;
public:
B()
{b1=0;b2=0;}
B(inti)
{b1=1;b2=0;}
B(inti,intj,intk):A(i),b1(j),b2(k)
{}
voidPrint()
{
A::Print();
cout<<b1<<","<<b2<<endl;
}
};
intmain()
{
Bob1,ob2(1),ob3(3,6,9);
ob1.Print();
ob2.Print();
ob3.Print();
return0;
}
运行结果:
0,0,0
0,1,0
3,6,9
程序功能:
输出空间一点的坐标。

2)定义一个图形类,其中有保护类型的成员数据:高度和宽度,一个公有的构造函数。

由该图形类建立两个派生类:矩形类和等腰三角形类。

在每个派生类中都包含一个函数area(),分别用来计算矩形和等腰三角形的面积。

#include<iostream>
usingnamespacestd;
classfigure
{
protected:
doubleheight,width;
public:
figure(double=0,double=0);
};
figure::figure(doubleh,doublew)
{
height=h;
width=w;
}
classtriangle:publicfigure
{
public:
doublearea();
triangle(double=0,double=0);
};
triangle::triangle(doubleh,doublew):figure(h,w) {
height=h;
width=w;
}
doubletriangle::area()
{
return0.5*height*width;
}
classrectangle:publicfigure
{
public:
doublearea();
rectangle(double=0,double=0);
};
rectangle::rectangle(doubleh,doublew):figure(h,w) {
height=h;
width=w;
}
doublerectangle::area()
{
returnheight*width;
}
intmain()
{
triangletri(2,3);
rectanglerec(2,3);
cout<<"Theareaoftriangleis:"<<tri.area()<<endl;
cout<<"Theareaofrectangleis:"<<rec.area()<<endl;
return0;
}
3)编写一个程序计算出圆和圆柱体的表面积和体积。

要求:
(1)定义一个点(point)类,包含数据成员x,y(坐标点),以它为基类,派生出一个circle类(圆类),增加数据成员r(半径),再以circle作为
直接基类,派生出一个cylinder(圆柱体)类,再增加数据成员h(高)。

设计类中数据成员的访问属性。

(2)定义基类的派生类圆、圆柱都含有求表面积和体积的成员函数和输出函数。

(3)定义主函数,求圆、圆柱的面积和体积。

#include<iostream>
usingnamespacestd;
constdouble
classpoint
{
protected:
doubleX,Y;
public:
point(doublex=0,doubley=0)
{X=x;Y=y;}
voidgetXY()
{
cout<<"PleaseinputX:";
cin>>X;
cout<<"PleaseinputY:";
cin>>Y;
}
voidshow()
{
cout<<"Thecoordinateofthepointis:("<<X<<','<<Y<<")."<<endl;
}
};
classcircle:protectedpoint
{
protected:
doubleradius;
public:
circle(doublex=0,doubley=0,doubler=0):point(x,y)
{X=x;Y=y;radius=r;}
voidgetXYradius()
{
circle::getXY();
cout<<"Pleaseinputradius:";
cin>>radius;
}
doublearea()
{returnPI*radius*radius;}
};
classcylinder:protectedcircle
{
protected:
doubleheight;
public:
cylinder(doublex=0,doubley=0,doubler=0,doubleh=0):circle(x,y,r) {X=x;Y=y;radius=r;height=h;}
voidgetdata()
{
circle::getXYradius();
cout<<"Pleaseinputtheheight:";
cin>>height;
}
doublearea()
{
returnPI*radius*radius*2+2*PI*radius*height;
}
doubleV()
{
returnPI*radius*radius*height;
}
};
intmain()
{
circleci;
cylindercy;
ci.getXYradius();
cy.getdata();
cout<<"Theareaofthecircleis:"<<ci.area()<<endl;
cout<<"Theareaofthecylinderis:"<<cy.area()<<endl;
cout<<"Thevolumeofthecylinderis:"<<cy.V()<<endl;
}
实验总结:
1.个人感觉面向对象比面向过程更加直观。

2.就是因为面向对象的思路是用程序语言直接描述客观世界,它程序的长度会更长,但是一个大程序会被分割成多个小部分,每一部分分开编程,然后再调试各个部分的连接情况,当程序比较大的时候,工作量其实相对更小。

相关文档
最新文档