当前位置:文档之家› C++多态练习题

C++多态练习题

C++多态练习题
C++多态练习题

一、填空题

(1)C++的两种联编方式为:动态联编和静态联编。

(2)C++支持两种多态性,静态联编所支持的多态性被称为编译时的多态性、动态联编所支持的多态性被称为运行时的多态性。

(3)重载函数在编译时表现出多态性,是静态联编;而虚函数则在运行时表现出多态性是动态联编。

(4)为了区分重载函数,把一个派生类中重定义基类的虚函数称为覆盖。

(5)如果派生类与基类的虚函数仅仅返回类型不同,其余相同,则c++认为是使用了不恰当的虚函数。

(6)在构造函数和析构函数中调用虚函数时,采用静态联编。

(7)纯函数的定义是在虚函数定义的基础上,再让函数等于0 。

(8)对于包含有纯虚函数的类被称为抽象类。

二、选择题(至少选一个,可以多选)

(1)用关键字(A)标记的函数被称为虚函数。

A.virtual

B.private

C.public

D.protected

(2)在C++中,要实现动态联编,必须使用(D)调用虚函数。

A.类名

B.派生类指针

C.对象名

D.基类指针

(3)下列函数中,可以作为虚函数的是(BD)。

A.普通函数

B.非静态成员函数

C.构造函数

D.析构函数

(4)在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值(B)。

A.不同

B.相同

C.相容

D.部分相同

(5)使用虚函数保证了在通过一个基类类型的指针(含引用)调用一个虚函数时,c++系统对该调用进行(A),但是,在通过一个对象访问一个虚函数,使用(B)。

A.动态联编

B.静态联编

C.动态编译

D.静态编译

(6)下面函数原型声明中,(C)声明的fun()为纯虚函数。

A.void func()=0;

B.virtual void func()=0;

B.virtual void func();

C.virtual void func(){};

(7)若一个类中含有纯虚函数,则该类称为(C)。

A.基类

B.虚基类

C.抽象类

D.派生类

(8)假设Myclass为抽象类,下列声明(CD)是错误的。

A.Myclass& func(int);

B.Myclass * pp;

C.int func(Myclass);

D.Myclass Obj;

(9)下面描述中,(BD)是正确的。

A.虚函数是没有实现的函数

B.纯虚函数的实现是在派生类中定义

C.抽象类是只有纯虚函数的类

D.抽象类指针可以指向不同的派生类

三、判断题

(1)抽象类中只能由一个纯虚函数。(×)

(2)构造函数和析构函数都不能说明为虚函数。(×)

(3)程序中可以说明抽象类的指针或引用。(√)

(4)一个类中的虚函数说明不仅对基类中的同名函数有影响,而且对它的派生类中重定义的函数也有影响。(×)

(5)在构造函数和析构函数中调用虚函数时,采用动态联编,即它们所调动的虚函数是在派生类中重定义的虚函数。(×)

(6)因为没有为纯虚函数定义代码,所以在构造函数和析构函数内均不可调用纯虚函数。

(√)

四、简答题

(1)什么叫做多态性?在c++中是如何实现多态的?

答:多态性就是同一个符号或名字在不同情况下具有不同解释的现象,即是指同一个函数的多种形态。C++可以支持两种多态性,编译时的多态性和运行时的多态性。多态性有两种表现形式:一种是不同的对象在收到相同的消息时,产生不同的动作,主要通过虚函数来实现;另一种是同一对象收到相同的消息却产生不同的函数调用,主要通过函数重载来实现。

(2)虚函数与一般重载函数有哪些区别?

答:虚函数与一般重载函数的区别,主要有以下几点:

1、重载函数只要求函数有相同的函数名,并且重载函数是在相同作用域中定义的名字相同的不同函数。而虚函数不仅要求函数名相同,而且要求函数的签名、返回类型也相同。也就是说函数原型必须完全相同,而且虚函数特性必须是体现在基类和派生类的类层次结构中。

2、重载函数可以是成员函数或友元函数,而虚函数只能是非静态成员函数。

3、构造函数可以重载,析构函数不能重载。正好相反,构造函数不能定义为虚函数,析构函数能定义为虚函数。

4、重载函数的调用是以所传递参数序列的差别作为调用不同函数的依据,而虚函数是根据对象的不同去调用不同类的虚函数。

5、重载函数在编译时表现出多态性,是静态联编;而虚函数则在运行时表现出多态性是动态联编,因此说动态联编是C++的精髓。

(3)什么叫做抽象类?抽象类有何作用?抽象类的派生类是否一定要给出纯虚函数的实现?

答:抽象类用来描述一组子类的共同的操作接口,它用作基类。从一个抽象类派生的类必须覆盖纯虚函数,或在该派生类中仍将它说明为纯虚函数,否则编译器将给出错误信息。说明了纯虚函数的派生类仍是抽象类。如果派生类中覆盖了所有的虚函数,则该派生类不再是抽象类。

(4)能否声明虚析构函数?有何用途?

答:能声明。如果一个类的析构函数是虚函数,那么,由它派生而来的所有子类的析构函数也是虚函数。如果析构函数为虚函数,则这个调用采用动态联编。delete运算符和析构函数一起工作,当使用delete删除一个对象时,delete隐含着对析构函数的一次调用,这样保证了使用基类类型的指针能够调用适当的析构函数针对不同的对象进行清除工作。

五、程序设计题

(1)使用虚函数编写程序求球体和圆柱体的体积及表面积。由于球体和圆柱体都可以看作

由圆继承而来,所以可以定义圆类Circle作为基类。在Circle类中定义一个数据成员radius和两个虚函数area()和volume()。由Circle类派生Sphere类和Column类。在派生类中对虚函数area()和volume()重新定义,分别求球体和圆柱体的体积及表面积。

#include

#include

using std::fixed;

using std::setprecision;

using namespace std;

const double PI=3.14159265;

class Circle

{ public:

Circle(double r) {radius=r;}

virtual double area() {return 0.0;}

virtual double volume() {return 0.0;}

protected:

double radius;

};

class Sphere:public Circle

{ public:

Sphere(double r):Circle(r){ }

double area() {return 4.0*PI*radius*radius;}

double volume()

{ return 4.0/3.0*PI*radius*radius*radius;}

};

class Column:public Circle

{ public:

Column(double r,double h):Circle(r){height=h;}

double area()

{ return 2.0*PI*radius*(height+radius );}

double volume()

{ return PI*radius*radius*height;}

private:

double height;

};

int main()

{

Sphere s(3.0);

Column c(4.0,5.0);

cout <

积 = " << s.area() << endl;

cout << fixed<

积 = " << c.volume() << endl;

cout <

积 = " << c.area() << endl;

return 0;

}

运行结果:

(2)编写一个程序,用于计算正方形、三角形和圆的面积及计算各类形状的总面积。

#include

#include

using std::fixed;

using std::setprecision;

const double PI=3.1415;

using namespace std;

class square

{

public:

square(float l){length=l;}

virtual float area(){return length*length;}

private:

float length;

};

class triangle

{

public:

triangle(float b,float h){base=b;height=h;}

virtual float area(){return base*height/2.0;} private:

float base,height;

};

class Circle

{

public:

Circle(double r){radius=r;}

virtual double area(){return PI*radius*radius;}

private:

double radius;

};

int main()

{

square s(6.0);

triangle t(3.0,4.0);

Circle c(5.0);

cout<

cout<

cout<

cout<

return 0;

}

运行结果:

C语言程序设计实验报告(实验大纲+过程)

《C程序设计》实验教学大纲 一、适用范围 大纲适用信息管理专业本科教学使用。 二、课程名称 C程序设计 三、学时数与学分 总学时:90 总学分:4 实验学时:28 实验学分:1 四、教学目的和基本要求 目的:通过C程序设计实验,培养学生对学习程序设计的兴趣,加深对讲授内容的理解,尤其是通过上机来掌握语法规则,使学生全面了解 C 语言的特点,熟练掌握 C 语言程序设计的基本方法和编程技巧。 基本要求:了解和熟悉C语言程序开发的环境;学会上机调试程序,善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行,达到实验知识和理论知识的融会贯通。上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止,上机结束后,应整理出实验报告。 注:带*的实验项目为选做实验项目 六、教材、讲义及参考书 《C程序设计题解与上机指导》谭浩强主编清华大学出版社 七、实验成绩评定办法 实验成绩=平时实验表现+实验报告。实验成绩占总成绩的20%。 实验成绩以等级形式给出,评定等级分优、良、中、及格、不及格五类。 1、平时考核:上机实验前,学生必须事先根据题目的内容编好程序,然后在实验时输入程序、调试程序、直至运行结果正确为止。在实验中,教师可根据学生编程操作能力、观察和分析及运用知识能力、程序编制正确性以及学生的课堂纪律、实验态度、保持实验室卫生等方面的表现进行综合考核。

2、实验报告:学生实验后应按时完成实验报告。 八、实验教学大纲说明 本大纲共安排28学时的实验,其中带*号实验项目为选做实验项目,实际课时为18学时。实验项目多为设计性实验项目,每个设计性实验项目中都包含数个小的设计性题目,其中带*号的题目为选做题目,有时间和有能力的同学可以选做。 九、实验项目 实验一C程序的运行环境和运行一个C程序的方法 一、实验目的 1.了解Visual C++6.0编译系统的基本操作方法,学会独立使用该系统。 2.了解在该系统上如何编辑、编译、连接和运行一个C程序。 3.通过运行简单的C程序,初步了解C源程序的特点。 二、实验内容 1.用编辑程序,输入教材第一章例1.1程序,并进行编译和运行。应了解所用的系统是用什么命令进行编译和连接运行的。编译和连接后所得到的目标程序的后缀是什么形式的? 2.编写一个C程序,输出以下信息: **************************** very good! **************************** 3.输入并运行教材第一章中例1.3,了解如何在运行时向程序变量输入数据。 实验二数据类型、运算符和表达式 一、实验目的 1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用格式转换符。 2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。 二、实验内容 1.输入并运行以下程序: main( ) { char c1,c2; c1=97;c2=98; pr intf(“%c %c\n”,c1,c2); printf(“%d %d\n”,c1,c2); } 在此基础上 ①将第三行、第四行改为: c1=321;c2=353; 再使之运行,分析其运行结果。 ②将第二行改为: int c1,c2; 再使之运行,分析其运行结果。。 2.输入并运行以下程序:

第七章继承多态练习题

第七章继承多态 一、选择题: 1、分析: class A { A() { } } class B extends A { //系统自动生成的构造方法和类的访问权限一样 } 哪两种说法是正确的? ( ) A:类B的构造方法是public的. B:类B的构造方法包含对this()的调用. C:类B的构造方法没有参数. D:类B的构造方法包含对super()的调用. 2、运行结果是:() class Base { Base() { System.out.print("Base"); } } public class Alpha extends Base { public static void main( String[] args ) { new Alpha(); new Base(); } } A: Base B: BaseBase C: 编译失败. D: 没有输出. E: 运行时异常. 3. 程序的运行结果是?() A: 编译失败. B: hello from a C: hello from b D: hello from b E: hello from a hello from a hello from b

4. 运行结果是:() class TestSuper { TestSuper(int i) { } } class TestSub extends TestSuper{ } class TestAll { public static void main (String [] args) { new TestSub(); } } A: 编译失败. B: 程序运行没有异常. C: 第7行抛出异常. D: 第2行抛出异常. 5. 程序的运行结果是?() A: 0 B: 1 C: 2 D: 编译失败. 6. 对于语句"B is a D" 和"B has a C",一下哪两种说法是正确的? ( ) A:D是B. B:B是D. C:D是C. D:B是C. E:D继承B. F:B 继承D. 7. 运行结果是?()

实验三多态性实验报告

浙江理工大学信息学院 实验指导书 实验名称:类的多态性的实现学时安排:3 实验类别:设计性实验实验要求:1人1组 学号:姓名:  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 一、实验目的 1.理解重载运算符的意义。 2.掌握使用成员函数、友员函数重载运算符的特点。 3.掌握重载运算符函数的调用方法。 4.掌握动态联编的概念。 5.掌握虚函数和纯虚函数的使用方法。 二、实验原理介绍 设计性实验 具体原理请见实验内容和步骤 实现对抽象类的继承,通过operator函数调用的形式,实现运算符的重载 三、实验设备介绍 软件需求: windows或linux下的c++编译器 硬件需求: 对于硬件方面的要求,建议配置是Pentium III 450以上的CPU处理器,64MB以上的内存,200MB的自由硬盘空间、CD-ROM驱动器、能支持24位真彩色的显示卡、彩色显示器、打印机。 四、实验内容 某公司的员工有经理Manager、技术人员Technicist和营销人员SalsePerson,他们的薪金计算方法如下: 经理按月计酬,方法是:基本工资+奖金;技术人员按月计酬,方法是:基本工资;营销人员按月计酬,方法是:基本工资+销售利润*5%。 每类人员都有职工编号、姓名、性别、入职时间、职位、基本工资等数据;各类人员

使用统一接口get_pay()计算各类人员的月薪,重载<<运算符实现员工信息的输出。其次,设计一个统计并输出该公司员工当月薪金情况的报表类Report,该类提供insert接口向Report类的容器中添加员工信息,并提供print接口用于展示以职位为单位的每个员工的职工编号、姓名、性别、入职时间以及当月该员工的薪酬,并统计出该职位员工薪酬的最高值和最低值。为了提供更方便的查找功能,请为Report类重载[]运算符,下标值为职位,能根据职位信息查找出所有符合该职位的员工。在主函数中对实现的类进行测试,首先,创建各类人员对象,通过Report类的insert接口向报表中添加这些人员信息,然后通过Report类的print接口输出当月员工薪酬情况报表。存储员工对象的容器请选用合适的STL容器。 五程序清单 ormat("ddd")<<"\t"; cout<<(*it)->getbasicmoney()<<"\t"<<"\t"; cout<<(*it)->getpay(month) << endl; } } void Report::insert(Employee* p) { (p); } Report::~Report(){ list::iterator it; for(it = (); it != (); it ++){ delete *it; } } double Technicist::getpay(int m){ return basicmoney; } double SalesPerson::getpay(int m){ return basicmoney + sales[m] * ;

《C语言程序设计》-综合性实验实验报告(参考格式)

综合性实验报告 课程名称:《C语言程序设计》 实验题目:班级成绩管理系统的设计与实现姓名学号:(组长) 系别: 专业班级: 指导教师: 实验日期:2012年06月01日—06月20日

一、实验目的和要求 实验目的 1、利用所学的三种程序基本结构以及数组、用户自定义函数进行一个小型程序的设计,进一步理解和掌握C语言的语法以及三种基本程序结构的综合应用。 2、通过程序中涉及到的排序、查找、求和等操作加深对算法、程序设计思路、常用程序设计技巧的理解与掌握,逐步培养学生的程序开发能力。 实验要求 1、根据实验内容,认真编写源程序代码、上机调试程序,书写实验报告。 2、分小组协作实验时,要写明每一位学生负责的实验内容。 二、设计要求 (一)学生信息和程序功能 给定的原始数据和程序应实现的功能是该C程序开发的依据,此实验只处理一个班级学生信息,最多学生数为120人。 1、学生信息和数据类型 最多学生人数和最多课程数定义为全局符号常量: #define Mmax 120 #define Nmax 3 (1)学生信息 学生信息包含:学号,姓名,三门课(语文,数学,英语)成绩和总分。 (2)数据类型 学号、姓名、课程三个信息为char型,课程分数和总分为float型,其余为int型。其中,假设学号有10位数字字符(注意此时要求存储空间要11个字节),例如2011023102表示入学年份为2011年,023是专业编码,102是学生在班级中的排号。 2、测试数据 测试数据在定义数组时以初值形式提供,其中学生总成绩通过程序计算。 学号姓名语文数学英语 2011023001 Zhang 73.5 85 67 2011023002 Li 83 91.5 87 2011023003 Cheng 65 82 78 2011023004 Wang 71 83 80.5 但是,在用单链表处理学生信息时,要求直接从键盘上接收数据。 3、程序功能 (1)学生信息(学号、姓名、成绩等)的显示(数据结构要求用数组); (2)按姓名查找学生(数据结构要求用数组); (3)计算各门课程的平均分(数据结构要求用数组);

实验8 多态性与虚函数

实验八多态性与虚函数 一、实验目的和要求 1.了解多态的概念; 2.了解虚函数的作用及使用方法; 3.了解静态关联和动态关联的概念和用法; 4.了解纯虚函数和抽象类的概念和用法 二、实验内容和结果 1.阅读下面的程序 1.1请写出程序的执行结果,并在上机时对照理解 class Vehicle {public: void run() const { cout << "run a vehicle. "<

airplane.run(); cout<<"(b) 用指向基类的指针访问成员函数: "<run(); vp=&airplane; vp‐>run(); } 1.2 如果将Vehicle 类的定义修改为虚函数,其余不变,请写出程序的执行结果,并在上机时对照理解 class Vehicle {public: virtual void run() const { cout << "run a vehicle. "<

JAVA继承和多态实验报告

实验项目名称:继承和多态 (所属课程:Java语言程序设计) 院系:专业班级:姓名: 学号:实验地点:指导老师: 本实验项目成绩:教师签字:日期: 1.实验目的 (1)掌握类的继承机制。 (2)熟悉类中成员变量和方法的访问控制。 (3)熟悉方法或构造方法多态性。 2.实验内容 (1)模拟编写程序,理解类的继承、多态、继承和多态规则。 (2)独立编程,实现类的继承和多态。 3.实验作业 设计一个类Shape(图形)包含求面积和周长的area()方法和perimeter()方法以及设置颜色的方法SetColor(),并利用Java多态技术设计其子类Circle(圆形)类、Rectangle (矩形)类和Triangle(三角形)类,并分别实现相应的求面积和求周长的方法。每个类都要覆盖toString方法。 海伦公式:三角形的面积等于s(s-a)(s-b)(s-c)的开方,其中s=(a+b+c)/2 程序代码为: Class包 package Class; public class Shape { private String color = "while"; public Shape(String color){ this.color = color; } public void setColor(String color){ this.color = color; } public String getColor(){ return color;

} public double getArea(){ return 0; } public double getPerimeter(){ return 0; } public String toString(){ return"color:" + color; } } package Class; public class Circle extends Shape { private double radius; public Circle(String color,double radius) { super(color); this.radius = radius; } public void setRadius(double radius){ this.radius = radius; } public double getRadius(){ return radius; } public double getCircleArea(){ return 3.14*radius*radius; } public double getCirclePerimeter(){ return 3.14*2*radius; } public String toString(){

实验4 类的继承和多态机制

实验4 类的继承和多态机制 一、实验目的 1、掌握类的继承机制; 2、掌握子类对父类构造方法的调用; 3、掌握方法覆盖和方法重载的区别。 二、实验内容 1、定义点类Point、圆类Circle、圆柱体类Cylinder。实现继承关系。 2、定义交通工具类Vehicle,一个小车类Car。实现Car对Vehicle的继承。 三、实验步骤 1、定义点类Point、圆类Circle、圆柱体类Cylinder。实现继承关系。 设计一个表示二维平面上点的类Point,包括表示坐标位置的成员变量x和y,获取和设置x和y值的方法。 设计一个表示二维平面上圆的类Circle,它继承自类Point,还包括表示圆半径的成员变量r、获取和设置r值的方法、计算圆面积的方法。 设计一个表示圆柱体的类Cylinder,它继承自类Circle,还包括表示圆柱体高的成员h、获取和设置h的方法、计算圆柱体表面积的方法、计算圆柱体体积的方法。 建立若干个Cylinder对象,输出其轴心位置坐标、半径、高、表面积及其体积的值。 class Point{ int x; int y; ;public Point(int x,int y){ this.x =x; this.y=y; } public int getX(){ return x; } public int getY(){ return y; } } class Circle extends Point{ double r; final double PI=3.1416; public Circle(int x,int y,double m){ super(x,y); r=m; } public double getR(){ return r; } public double circlearea(){ return PI*r*r;

哈工大(威海)c语言实验报告册答案

实验1简单判定性问题求解 一、实验学时 完成本实验需4学时。 二、实验目的 1、阅读程序题 (1)掌握C语言数据类型,熟悉如何定义一个整型、字符型的变量,以及对它们赋值的方法; (2)掌握不同的类型数据之间赋值的规律; (3)掌握数据在内存中的存储方式; (4)学会输入、输出函数的基本格式和使用方法; (5)学会使用有关算术运算符、逻辑运算符、关系运算符,以及包含这些运算符的表达式。 2、编程题 (1)如何运用if-else判定性结构进行程序设计; (2)如何运用switch判定性结构进行程序设计。 3、调试题 (1)熟悉C程序的编辑、编译、连接和运行的过程。 三、实验指导 为了达到最佳的实验效果,以下提供几条适于编程的指导意见,可供参考。 1、阅读程序题应先运用自己在课堂所学的知识,推导出结果,在上机时输入计算机,印证自己推导的结果,注意观察数据在内存中的存储方式、含不同种运算符表达式的输出结果。 2、编程题必须首先画出流程图,并反复思考判断程序设计的正确性,完成程序的设计。要注意简单判定性问题的结构选择。 3、调试题应明确程序的调试、测试是一项非常烦琐的工作,也是非常重要的工作。对于初学者来说应该建立良好的习惯,在调试程序的时候,应该尽可能考虑到程序运行时各种可能情况。

四、实验内容 1、阅读程序题 (1)main( ) { /*定义字符型变量*/ char c1,c2; /*向字符变量赋以整数*/ c1=97; c2=98; printf("%c %c\n",c1,c2); /*以字符形式输出*/ printf("%d %d\n",c1,c2); /*以整数形式输出*/ } 思考:可否改成int c1,c2;输出结果是?相同 (2)main() { int a=7,b=5; printf("%d\n",b=b/a); } 思考:若将printf语句中%d变为%f,可否输出分式的值?可以(3)main() { int a=9; a+=a-=a+a; /*包含复合的赋值运算符的赋值表达式*/ printf("%d\n",a); } 思考:赋值表达式a+=a-=a+a的求解步骤? 第一步:a=a-(a+a)=-9 第二步a=a+a=18 (4)main() { int k=-1; printf("%d,%u\n",k,k);

实验名称 java类的继承和多态

实验名称 java类的继承和多态实验名称 Java类的继承和多态 一、实验目的 1、理解Java类的继承和多态的概念 2、掌握类的继承机制的实现 3、掌握方法的重载,以及多态的实现。 二、实验要求 1、本实验属于验证型和设计型实验。需要根据已给的源程序运行结果,并结合问题进行新的设计; 2、对实验过程中提出的问题进行解答; 3、完成实验报告。 三、实验内容与过程 1、上机运行下面的程序,并回答下面的问题。 public class ClassOne{ int num=100; public void compute(){ num-=50; } public static void main(String args[]){ ClassOne one=new ClassOne(); ClassTwo two=new ClassTwo(); System.out.println(“num of ClassTwo:”+two.num); System.out.println(“num of ClassOne:”+two.getNum());

https://www.doczj.com/doc/911586813.html,pute(); System.out.println(“num of ClassTwo:”+two.num); System.out.println(“num of ClassOne:”+two.getNum()); } } class ClassTwo extends ClassOne{ int num=0; public void plus(){ num+=50; } public int getNum(){ return super.num; } } 问题: (1) 请指出Java面向对象编程中三个主要特性。 (2) Java中的继承机制是什么, (3) 请指出程序中关键字super的作用。 2、运行下面的程序,回答问题。class Monkey{ private int age=10; void speak(){ System.out.println("I am monkey."); } }

C语言综合性设计实验报告

C语言综合性设计实验报告 1.实验题目 建立一个简单的会员卡储值积分管理系统。 该系统的主要功能是:会员卡管理功能和会员卡储值积分管理。 会员卡管理功能: (1)根据身份证办理会员卡,一张身份证只能办理一张会员卡。 (2)根据需要可以注销、挂失、冻结会员卡或修改会员卡密码以及积分和消费金额查询。会员基本信息包括:会员身份证号、卡号、密码、积分、消费金额、级别。 会员卡储值积分管理: (1)根据会员卡级别设置折扣率,根据折扣率自动打折计算消费金额。 (2)根据消费金额计算积分,积分累计达到一定标准后换购商品。 2.设计分工 组员 组员 组员: 组员 在本系统开发中,小组各成员的分工如下: 会员的信息存储数据结构和各个子函数的名称及实验报告的书写由全体成员统一制定; 主函数main,主控程序模块call函数,系统退出函数,各函数名称及用到的变量名称的规定由胡丽萍统一负责。 会员管理总函数,会员积分总函数,会员信息查询函数及信息内容输出函数由陈建飞负责。 会员信息冻结函数,挂失函数,注销函数及内部返回到主菜单的返回函数由郭娟如负责。 密码设置函数,查询时检查函数,增加新会员函数,修改密码函数统一由郭霞负责。 输入级别函数,输入消费函数,查询积分函数,查询折扣率函数统一交由胡桂芳负责。 3.问题概述 要实现这个会员积分管理系统,要遇到的问题如下: ①. 首先要有一个主函数来负责对子函数的调用。 ②. 进行新增一个会员时的增加操作 ③. 对身份证号码的判定操作及密码的设置及判定操作 ④. 输出会员信息时对各部分的总体把握 ⑤. 修改密码时覆盖其原有的密码 ⑥. 会员级别及消费来查询折扣率和积分的操作 4.问题分析 首先该问题分为两个大块,一个是会员卡管理功能,另一个是会员积分管 理功能。针对会员卡管理功能,首先应具备7项功能,新会员的录入,查询会员

c++多态性与虚函数习题

作业题 一、写出下列程序运行结果 1.#include using namespace std; class A { public: virtual void func( ) {cout<<”func in class A”< using namespace std; class A{ public: virtual ~A( ){ cout<<”A::~A( ) called “<

}; void fun(A *a) { delete a; } int main( ) { A *a=new B(10); fun(a); } 二、程序设计题 1有一个交通工具类vehicle,将它作为基类派生小车类car、卡车类truck和轮船类boat,定义这些类并定义一个虚函数用来显示各类信息。 5.2定义一个shape抽象类,派生出Rectangle类和Circle类,计算各派生类对象的面积Area( )。 5.5某学校对教师每月工资的计算公式如下:固定工资+课时补贴。教授的固定工资为5000元,每个课时补贴50元;副教授的固定工资为3000元,每个课时补贴30元;讲师的固定工资为2000元,每个课时补贴20元。给出教师抽象类及主函数,补充编写程序求若干教师的月工资。 #include using namespace std; class Teacher{ protected: double salary; int workhours; public: Teacher(int wh=0){workhours=wh;} virtual void cal_salary()=0; void print(){cout<cal_salary(); prof.print(); Vice_Prof vice_prof(250); pt=&vice_prof; pt->cal_salary(); vice_prof.print(); Lecture lecture(100); pt=&lecture; pt->cal_salary(); lecture.print (); return 0; }

C语言实验报告参考答案

《C语言程序设计》 实 验 手 册

《C语言程序设计》实验课程简介 课程名称:C语言程序设计实验 课程性质:专业必修课 课程属性:专业必修课 学时学分:学时32 学分1 开课实验室:软件实验室 面向专业:网络工程、软件工程、计算机科学与技术 一、课程的任务和基本要求 C语言程序设计实验是面向计算机相关专业学生开设的《C语言程序设计》实验课,是配合《C语言程序设计》课程而开设的实验性教育环节。本课程的主要任务是让学生充分掌握C 语言程序设计的基本概念、各种数据类型的使用技巧、模块化程序设计的方法等。C语言程序设计实验对课程中所涉及的知识进行验证,同时也是学生很好地学习课程的辅助手段。通过C语言上机实验的教学活动,使学生真正全面掌握C语言的基础知识,培养和提高学生的程序开发能力。 二、实验项目 【实验一】最简单的C程序---顺序程序设计 【实验二】逻辑运算和判断选取控制 【实验三】循环结构程序设计(一) 【实验四】循环结构程序设计(二) 【实验五】函数 【实验六】数组(一) 【实验七】数组(二) 【实验八】指针 【实验九】结构体、共用体和文件 【实验十】C程序综合性实验 三、有关说明 1、与其它课程和教学环节的联系: 先修课程:计算机文化 后续课程:面向对象程序设计、Java程序设计、数据结构、软件工程 2、教材和主要参考书目: (1)教材: 《C程序设计习题解答与上机指导》,谭浩强吴伟民著,北京:清华大学出版社,2003年。(2)主要参考书目: 《C语言程序设计》谭浩强主编,清华大学出版社,2003年。

三、实验内容 实验一最简单的C程序---顺序程序设计 (验证性实验 2学时) (一)、实验目的 1.熟悉win-tc程序运行环境 2.掌握运行一个C程序的步骤,理解并学会C程序的编辑、编译、链接方法 3.掌握C语言中使用最多的一种语句——赋值语句 4.掌握数据的输入输出方法,能正确使用各种格式控制符 (二)、实验内容 1.写出下列程序的运行结果 (1)#include void main() { printf(“*****************\n”); printf(“This is a c program. \n”); printf(“****************\n”); } 运行结果及分析:运行结果为: Printf函数语句表示输出引号内的字符串,最后的\n表示换行, 将程序中的\n去掉后,运行结果及分析:运行结果为: 去掉\n后不换行连续显示 (2)#include void main() { int a=100,b=20,sum,sb; sum=a+b; sb=a/b; printf("sum=%d,sb=%d",sum,sb); } 运行结果及分析: sum=100+20=120;sb=100/20=5. (3)#include void main( )

实验6多态性与虚函数

[实验目的] 1、了解多态性的概念; 2、了解虚函数的用途及使用方法; 3、了解纯虚函数和抽象类的概念和用法。 [实验要求] 给出以下各实验内容的源程序代码,并把编译、运行过程中出现的问题以及解决方法填入实验报告中,按时上交。 [实验学时] 2学时。 [实验内容] 1、写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)。利用指针、虚函数printArea()分别输出以上三者的面积,3个图形的数据在定义对象时给定。 [源程序] #include using namespace std; class Shape { public: virtual float area()const=0; virtual void display()const=0; }; class Circle:public Shape { public: Circle(double a):r(a){} virtual float area()const{return 3.14*r*r;} virtual void display()const { cout<<"圆面积"<

class Rectangle:public Shape { public: Rectangle(double a,double b):l(a),w(b){} virtual float area()const{return l*w;} virtual void display()const { cout<<"矩形面积"<display(); m=m+p[i]->area(); }

Java继承与多态实验报告

西安邮电大学 (计算机学院) 课内实验报告 实验名称:继承与多态 专业名称:计算机科学与技术 班级:计科1405班 学生姓名:高宏伟 学号:04141152 指导教师:刘霞林 实验日期:2016.10.13

一、实验目的 通过编程和上机实验理解Java 语言的继承和多态特性,掌握变量的隐藏、方法的覆盖、重载,掌握抽象类和接口的使用。 二、实验要求 1.编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序。 2.编写体现类的多态性(成员方法重载)的程序。 3.编写体现类的多态性(构造方法重载)的程序。 4.编写使用接口的程序。 三、实验内容 (一)类的继承 1.创建公共类Student. (1)编写程序文件Student.java,源代码如下: public class Student { protected String name; //具有保护修饰符的成员变量 protected int number; void setData(String m,int h) //设置数据的方法 { name =m; number= h; } public void print() //输出数据的方法 { System.out.println(name+", "+number); } } (2)编译Student.java,产生类文件Student.class。 2.创建继承的类Undergraduate

(1)程序功能:通过Student 类产生子类undergraduate,其不仅具有父类的成员变量name()、number(学号),还定义了新成员变量academy(学院)、department (系)。在程序中调用父类的print 方法。 (2)编写Undergraduate 程序: class Undergraduate extends Student { 【代码1】//定义成员变量academy 【代码2】//定义成员变量department public static void main(String args[]) { 【代码3】//创建一个学生对象s 【代码4】//用父类的setData方法初始化对象s 【代码5】//对象s调用print方法 【代码6】//创建一个大学生对象u 【代码7】//调用父类的成员方法setData初始化对象u 【代码8】//设置对象u的成员变量academy 【代码9】//设置对象u的成员变量department System.out.print(https://www.doczj.com/doc/911586813.html,+", "+u.number+", "+u.academy+", "+u.department); } } (3)编译并运行程序 注意:公共类Student 与undergraduate 类要在同一文件夹(路径)。 (二)方法的重载 (1)程序功能:对不同的数进行排序输出。在IntSort 类中定义3 个同名的方法sort。 (2)编写Sort.java 文件,源代码如下。 import java.awt.Graphics; import java.applet.Applet; class IntSort { public String sort(int a, int b) { if (a>b) return a+""+b; else return b+""+a; } public String sort(int a, int b, int c) { int swap; if (a

java多态性

Java的多态性 面向对象编程有三个特征,即封装、继承和多态。 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据。 继承是为了重用父类代码,同时为实现多态性作准备。那么什么是多态呢? 方法的重写、重载与动态连接构成多态性。Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是复杂的继承关系也给C++开发者带来了更大的麻烦,为了规避风险,Java只允许单继承,派生类与基类间有IS-A的关系(即“猫”is a “动物”)。这样做虽然保证了继承关系的简单明了,但是势必在功能上有很大的限制,所以,Java引入了多态性的概念以弥补这点的不足,此外,抽象类和接口也是解决单继承规定限制的重要手段。同时,多态也是面向对象编程的精髓所在。 要理解多态性,首先要知道什么是“向上转型”。 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类。我可以通过 Cat c = new Cat(); 实例化一个Cat的对象,这个不难理解。但当我这样定义时: Animal a = new Cat(); 这代表什么意思呢? 很简单,它表示我定义了一个Animal类型的引用,指向新建的Cat类型的对象。由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象的。那么这样做有什么意义呢?因为子类是对父类的一个改进和扩充,所以一般子类在功能上较父类更强大,属性较父类更独特, 定义一个父类类型的引用指向一个子类的对象既可以使用子类强大的功能,又可以抽取父类的共性。 所以,父类类型的引用可以调用父类中定义的所有属性和方法,而对于子类中定义而父类中没有的方法,它是无可奈何的;

C语言综合实验报告模板(附调试代码)

学生姓名:学号:专业班级: 实验类型:□验证□综合□设计□创新实验日期: 实验项目:学生成绩管理系统 一、实验目的和要求 目的: 1.掌握三种程序基本结构; 2.熟练使用数组、用户自定义函数等相关知识进行程序设计; 3.熟悉结构化程序设计语言思想编写程序代码; 4.理解和掌握C语言的语法以及三种基本程序结构的综合应用; 5.熟悉排序、查找、统计分析等常用算法 6.熟悉C语言的编程和调试环境,培养学生用计算机解决实际问题的能力要求:根据实验内容,认真编写源程序代码、上机调试程序,书写实验报告。 二、实验内容 综合利用所学C语言三种程序基本结构以及数组(或指针)、用户自定义函数等相关知识进行一个小型学生成绩管理系统的设计与实现,具体内容如下:某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,实现如下的学生成绩管理系统: (1)录入每个学生的学号和考试成绩 (2)计算课程的总分和平均分 (3)按成绩由高到低排出名次表 (4)按学号由小到大排出成绩表 (5)按学号查询学生考试成绩 (6)按优秀(90-100分)、良好(80-89分)、中等(70-79分)、及格(60-69分)、不及格(0-59分)5个类别,统计每个类别的人数及其所占百分比(7)输出每个学生的学号、考试成绩 三、实验步骤 1.仔细阅读实验要求和书上的相关内容,在磁盘上新建以学号姓名命名的文件夹。

2.编写程序代码、编译、连接及运行程序、查找程序中的错误 3.函数及功能说明 四、完整源程序代码 五、结果分析及总结 分析运行结果,并进行总结(可以从以下几个方面来总结:你在编程过程中对问题是如何分析的?遇到了哪些难题?你是怎么克服的?你的收获有哪些?) 调试代码: #include #include #include #define STU_NUM 30 /*最多的学生人数*/ int Menu(void); void Readscore (long num[],float score[],int n); void Aversumofscore(float score[],int n); void Desortbyscore(long num[],float score[],int n); void Assortbynum(long num[],float score[],int n); void searchbynum(long num[],float score[],int n); void statisticanalysis(float score[],int n); void printscore(long num[],float score[],int n); int main() { char itemselected; int n; float score[STU_NUM]; long num[STU_NUM];

实验三虚函数与多态纯虚函数(完全版)

实验三虚函数与多态、纯虚函数 一.实验目的 1. 在掌握继承与派生关系的基础上,进一步理解虚函数与多态性的关系,实现运行时的多态。 2. 学会定义和使用纯虚函数 二、实验内容 1.范例:了解"单接口,多方法"的概念。现有称为figure的基类,存放了各二维对象(三角形、矩形和圆形三个类)的各维数据,set_dim()设置数据,是标准成员函数。 show_area()为虚函数,因为计算各对象的面积的方法是不同的。 【程序】 #include < iostream > using namespace std; class figure{ protected: double x,y;

public: void set_dim(double i,double j=0) { x=i; y=j; } virtual void show_area() { cout<<"No area computation defined for this class.\n"; } }; class triangle:public figure{ public: void show_area() { cout<<"Triangle with height "<< x<<" and base "<< y<<" has an area of "<< x*0.5*y<< endl; } }; class square:public figure{ public:

void show_area() { cout<<"Square with dimensions "<< x<<" and "<< y<<" has an area of "<< x*y<< endl; } }; class circle:public figure{ public: void show_area() { cout<<"Circle with radius "<< x<<" has an area of "<<3.14159*x*x<< endl; } }; int main(){ figure *p; triangle t; square s;

相关主题
文本预览
相关文档 最新文档