文档库 最新最全的文档下载
当前位置:文档库 › -多态性和虚函数

-多态性和虚函数

-多态性和虚函数

【实验目的】

1、了解多态性的相关概念。

2、了解运算符重载原则,掌握常用运算符重载方法。

3、了解虚函数的定义,原理,特点,适用方法。

4、了解纯虚函数,抽象类概念,定义,作用,适用方法。

5、了解虚析构函数。

【实验内容】

定义一个抽象类shape,应用抽象类shape派生圆类circle、圆内接正方形类in_square 和外切正方形类ex_square。求圆、圆内接正方形和外切正方形的面积和周长。假设圆的半径均为5.

提示:问题求解的关键在于定义两个纯虚函数,求面积函数:area()和求周长函数perimeter()。

结果截图

2、定义一个点类Point,计算平面坐标系中两点的距离。

(1)用友元函数double distances(Point &p1,Point &p2);实现求两点的距离。

(2)用成员函数double Distance(const Point &p);实现求两点的距离。

实验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. "<

多态性与虚函数

第17课多态性与虚函数 一、多态性 1、多态性的概念 向不同的对象发送相同的消息,不同的对象会产生不同的行为。 在C++中,多态性的表现形式之一为:具有不同功能的函数可以用同一个函数名,这样就 可以实现用一个函数名调用不同内容的函数。 2、多态性的类别 (1)静态多态性 通过重载(函数、运算符)实现,编译时确定 (2)动态多态性 通过虚函数实现,在运行时确定调用的是哪个函数 ------------------------------------------------------------------------------- 二、静态多态性 1、实例:重载函数,输出三个数中的最大数(17_000.cpp)

2、实例:重载运算符“<<”,输出一个类对象(17_001.cpp)

3、在上例基础上,增加一个派生类:重载运算符“<<”,输出不同的类对象(17_002.cpp)

3、在上例中建立同名“display()”函数(17_002_1.cpp)

三、利用虚函数实现动态多态性 1、虚函数的作用 虚函数的作用是,允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。 2、实例:(17_004.cpp) 说明:本来,基类指针是用来指向基类对象的,如果用它来指向派生类对象,则自动进行指针类型转换,将派生类的对象的指针先转换成基类的指针,这样,基类指针指向的是派生类中的基类部分。 在基类的“display”函数前加上了“virtual”,使之成为虚函数,就可以使用基类指针调用派生类中的同名函数“display”了。

多态性和虚函数

多态性和虚函数

Problem A: C++习题抽象基类Description 编写一个程序,声明抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积(结果保留两位小数),3个图形的数据在定义对象时给定。 Input 圆的半径 矩形的边长 三角形的底与高 Output 圆的面积 矩形的面积 三角形的面积 Sample Input 12.6 4.5 8.4 4.5 8.4 Sample Output area of circle = 498.76 area of rectangle = 37.80 area of triangle = 18.90 #include #include using namespace std; class Shape { public:

virtual double area()const=0; }; class Circle:public Shape { public: Circle(double r):radius(r) {} virtual double area() const { return 3.14159*radius*radius; }; protected: double radius; }; class Rectangle:public Shape { public: Rectangle(double w,double h):width(w),height(h) {} virtual double area() const { return width*height; }

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; }

实验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(); }

实验六 多态性和虚函数

实验六多态性和虚函数 一、实验目的 1、了解多态性的概念。 2、了解虚函数的作用及其使用方法。 3、了解静态关联和动态关联的概念和用法。 4、了解纯虚函数和抽象类的概念和用法。 二、实验要求 1、分析程序运行结果,掌握虚函数的使用。 程序一: #include class ONE { public: virtual void f(){cout<<"l"<f(); } 程序二: #include class Base { public: virtual void fn() { cout <<"In Base Class\n";} }; class SubClass :public Base { public: virtual void fn(){ cout <<"In Sub Class\n"; } }; void main()

{ Base bc,*p; SubClass sc; p=&bc; p->fn(); p=≻ p->fn(); } 2、实现一个类A,在A中有两个私有的整型变量a和b,定义构造函数对a和b进行初始化,并实现成员函数geta()取得a的值和getb()取b的值。实现类B从A继承,覆盖geta(),使其返回a的2倍。主函数中声明类B对象,调用类B中的geta()并将结果输出。 3、声明抽象基类Shape,由它派生出3个派生类:Cirle(圆形)、Rectangle(矩形)、Triangle (三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象是给定。

C++实验多态性实验报告

贵州大学实验报告 学院:电子信息学院专业:通信工程班级: 姓名学号实验组5实验时间指导教师成绩 实验项目名称多态性 实 验通过让学生进行实验,使其对于动态多态性有一个较为深入的了解和熟悉。最终可以目熟练使用。 的 实 1.编写 4 个重载函数 Double( x),返回值为输入参数的两倍;参数类型分别为int 、验long 、float 、 double ,返回值类型与参数类型一样。 2.请编写一个抽象类Shape,在此基础上派生出类Rectangle和Circle,二者都有 要 计算对象面积的函数GetArea ()和计算周长函数GetPerim ()。 求3.对类 Point 重载 ++(自增)、 -- (自减)运算符。 实 验Visual C++的编译环境下,独立完成实验要求的内容,独立完成编写、编译以及运行 原的过程 理 实 验 安装了 Visual C++ 的 PC机器 仪 器 实 验 按照实验要求的内容逐一完成实验的要求。顺序是编写、编译、运行。 步 骤

实 1. 编写 4 个重载函数 Double(x),返回值为输入参数的两倍;参数类型分别为int、 验 long 、 float 、 double ,返回值类型与参数类型一样。 2. 请编写一个抽象类Shape,在此基础上派生出类Rectangle 和 Circle,二者都有计 内算对象面积的函数GetArea ()和计算周长函数GetPerim ()。容 3. 对类 Point 重载 ++(自增)、 -- (自减)运算符。 1、代码如下: #include using namespace std; int Double(int x); long Double(long x); float Double(float x); double Double(double x); int main() { int myInt = 6500; cout< #define PI 3.1415926; using namespace std; class Shape // 抽象类的定义 { public: virtual double GetArea()= 0; //纯虚函数

实验五 虚函数与多态性

实验三继承与多态性 一、实验目的与要求 1、掌握继承、基类和派生类的概念。 2、掌握初始化基类成员的方法。 3、掌握派生类对基类的继承。 4、学习虚函数和纯虚函数的定义与使用方式。 5、理解抽象类的概念,学习如何用指针指向其他的派生类,实现多态性。 6、掌握抽象类的定义与使用方式,并注意指针的用法。 7、学习如何使用虚函数、纯虚函数、抽象类和实现类的多态性。 二、实验设备与平台 实验设备要求每个学生一台电脑,其中运行环境为VC++ 6.0系统或新版。 三、实验内容与步骤 实验:编写一个人员信息管理系统。这个系统的功能是:交互式地实现校园人员信息的录入与显示。 分析: 学校里,主要有四类人员:大学本科学生、教师、研究生和助教。 大学本科生每周有固定的学时数。教师除了固定的学时数外,还有每周的教学时数。研究生除了固定的学时数外,每周还可以自由做一定的研究。助教除了上课外,还要做研究和一定的教学工作。 人员的基本信息包括姓名、编号、性别、身份证号、总学时数、以及每周固定学时数。各个人员之间的关系:people类派生出student类和teacher类,student类派生出graduate 类,graduate类和teacher类派生出TA类。 以下给出部分程序: #include using namespace std; class people { public: //添加程序 private: }; class student: virtual public people {

public: //添加程序 private: }; class teacher: virtual public people { public: //添加程序 private: }; class graduate: virtual public student { public: //添加程序 private: }; class TA: public graduate, public teacher { public: //添加程序 private: }; void main() { //添加程序 }

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

实验三虚函数与多态、纯虚函数 一.实验目的 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;

c多态性与虚函数习题

1.概念填空题 1.1 C++支持两种多态性,分别是静态和动态。 1.2在编译时就确定的函数调用称为静态联编,它通过使用重载函数实现。 1.3在运行时才确定的函数调用称为动态联编,它通过虚函数来实现。1.4虚函数的声明方法是在函数原型前加上关键字 virtual 。在基类中含有虚函数,在派生类中的函数没有显式写出virtual关键字,系统依据以下规则判断派生类的这个函数是否是虚函数:该函数是否和基类的虚函数参数个数相同 /同名;是否与基类的虚函数相应类型相同;是否与基类的虚函数返回值类型相同。如果满足上述3个条件,派生类的函数就是虚函数。并且该函数覆盖基类的虚函数。 1.5当通过指针或应用使用虚函数时,C++会在与对象关联的派生类中正确的选择重定义的函数。实现了运行时多态。而通过对象使用虚函数时,不能实现运行时多态。 1.6 纯虚函数是一种特别的虚函数,它没有函数的函数体部分,也没有为函数的功能提供实现的代码,它的实现版本必须由派生类给出,因此纯虚函数不能是。拥有纯虚函数的类就是抽象类,这种类不能建立对象。如果纯虚函数没有被重载,则派生类将继承此纯虚函数,即该派生类也是纯虚函数。 1.7 类的构造函数不可以(可以/不可以)是虚函数,类的析构函数可以(可以/不可以)是虚函数。当类中存在动态内存分配时经常将类的析构函数声明成虚函数。 2.简答题 2.1在C++中,能否声明虚构造函数?为什么?能否声明虚析构函数?为什么? 不可以声明纯构造函数,可以声明纯析构函数,因为C++中构造函数不能够被继承,而唇函数具有强继承性 2.2 什么是抽象类?抽象类有何作用?可以声明抽象类的对象吗?为什么? 一个类中至少有一个纯纯虚函数 抽象类中的纯虚函数可以在抽象类中定义,也可以是从它的抽象类中继承下来重订于定义 可以声明抽象类的指针和引用 2.3多态性和虚函数有何作用? 2.4是否使用了虚函数就能实现运行时的多态性?怎样才能实现运行时的多态性? 2.5为什么析构函数总是要求说明为虚函数? 3.选择题 3.1在C++中,要实现动态联编,必须使用( D )调用虚函数。 A.类名 B.派生类指针 C.对象名 D.基类指针 3.2下列函数中,不能说明为虚函数的是( )。 A.私有成员函数 B.公有成员函数 C.构造函数 D.析构函数 3.3在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值( )。 A.相同 B.不同 C.相容 D.部分相同 3.4当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中()。 A.都是虚函数

多态性和虚函数 实验报告

淮海工学院计算机科学系实验报告书 课程名:《 C++程序设计(二)》 题目:多态性和虚函数 班级: 学号: 姓名:

1、实验内容或题目 (1)声明二维坐标类作为基类派生圆的类,把派生类圆作为基类,派生圆柱体类。其中,基类二维坐标类有成员数据:x、y坐标值;有成员函数:构造函数实现对基类成员数据的初始化、输出的成员函数,要求输出坐标位置。派生类圆类有新增成员数据:半径(R);有成员函数:构造函数实现对成员数据的初始化、计算圆面积的成员函数、输出半径的成员函数。派生圆柱体类新增数据有高(H);新增成员函数有:构造函数、计算圆柱体体积的函数和输出所有成员的函数。请完成程序代码的编写、调试。 (2)教材393页7-8题。 (3)教材416页1、4、5题。 2、实验目的与要求 (1)理解继承与派生的概念 (2)掌握通过继承派生出一个新的类的方法 (3)了解多态性的概念 (4)了解虚函数的作用与使用方法 3、实验步骤与源程序 ⑴实验步骤 先定义一个基类point,及其成员函数,然后以public的继承方式定义子类circle,再定义一个派生类cylinder,最后在main主函数中定义类对象,调用函数实现其功能。 先定义一个基类A及其重载的构造函数,然后以Public派生出子类B,再定义其构造函数,最后在main主函数中定义类对象,调用成员函数实现其功能。 ⑵源代码 1.#include class Point { public: Point(float=0,float=0); void setPoint(float,float); float getX() const {return x;}

11多态性与虚函数

第10章多态性与虚函数 【内容提要】 多态性的概念; 函数和运算符的重载; 虚函数和抽象类。 【重点与难点】 10.1 多态性的概念 在面向对象的概念中,多态性是指不同对象接收到相同消息时,根据对象类的不同产生不同的动作。 由静态联编支持的多态性称为编译时的多态性或静态多态性,也就是说,确定同名操作的具体操作对象的过程是在编译过程中完成的。C++用函数重载和运算符重载来实现编译时的多态性。 由动态联编支持的多态性称为运行时的多态性活动太多态性,也就是说,确定同名操作的具体操作对象的过程是在运行过程中完成的。C++用继承和虚函数来实现运行时的多态性。 10.2 函数和运算符的重载 10.2.1 函数重载 面向对象程序设计中,函数的重载表现为两种情况:第一种是参数个数或类型有所差别的重载,第二种是函数的参数完全相同但属于不同的类。 10.2.2 运算符重载 C++预定义的运算符只是对基本数据类型进行操作,而对于自定义的数据类型比如类,却没有类似的操作。为了实现对自定义类型的操作,就必须自己编写程序来说明某个运算符作用在这些数据类型上时,应该完成怎样的操作,这就要引入运算符重载的概念。 运算符的重载形式有两种,一种是重载为类的成员函数,一种是重载为类的友元函数。 成员运算符函数的定义: 在类内声明的一般形式为: <返回类型> operator<运算符>(参数表); 在类外定义的一般形式为: <返回类型> <类名∷> operator<运算符>(参数表) { 函数体 } 其中,operator是定义运算符重载函数的关键字;运算符是要重载的运算符的名称;参数表给出重载运算符所需要的参数和类型。 将重载的运算符函数定义为类的友元函数,称为友元运算符函数。友元运算符函数不 友员运算符函数的定义: 在类内声明的一般形式为: friend<返回类型> operator<运算符>(参数表); 在类外定义的一般形式为: <返回类型> operator<运算符>(参数表) { 函数体 } 其中,friend是声明友元函数的关键字,operator是定义运算符重载函数的关键字;运 算符是要重载的运算符的名称;参数表给出重载运算符所需要的参数和类型。 几种典型运算符的重载

多态性与虚函数练习

多态性与虚函数练习 1.设计一个评选优秀教师和学生的程序,其类结构如图1所示。当输入一系列教师或学生的记录后,将优秀学生及教师的姓名列出。 图1 类结构 假设运行结果如下所示:#include #include using namespace std; class Base { public: void getname(){ cout<<"姓名:";cin>>name;} void printname() { cout<>num;} int isgood() { return num>90?1:0;} private: int num; }; class Teacher:public Base { public: void getnum() { cout<< "每年发表论文数:";cin>>num;} int isgood(){ return num>3?1:0;} 类Base void getname() void printname() 纯虚函数int ifgood()=0 string name 类student void getnum() int num 纯虚函数ifgood实现:若考试成绩大于90分,则返回1 类teachere void getnum() int num 纯虚函数ifgood实现:若一年发表论文大于3篇,则返回1

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

多态性与虚函数 1.概念填空题 1.1 C++支持两种多态性,分别是编译时和运行时。 1.2在编译时就确定的函数调用称为静态联编,它通过使用函数重载,模板等实现。 1.3在运行时才确定的函数调用称为动态联编,它通过虚函数来实现。 1.4虚函数的声明方法是在函数原型前加上关键字virtual。在基类中含有虚函数,在派生类中的函数没有显式写出virtual关键字,系统依据以下规则判断派生类的这个函数是否是虚函数:该函数是否和基类的虚函数同名;是否与基类的虚函数参数个数相同、类型;是否与基类的虚函数相同返回类型。如果满足上述3个条件,派生类的函数就是虚函数。并且该函数覆盖基类的虚函数。 1.5 纯虚函数是一种特别的虚函数,它没有函数的函数体部分,也没有为函数的功能提供实现的代码,它的实现版本必须由派生类给出,因此纯虚函数不能是友元函数。拥有纯虚函数的类就是抽象类类,这种类不能实例化。如果纯虚函数没有被重载,则派生类将继承此纯虚函数,即该派生类也是抽象。 3.选择题 3.1在C++中,要实现动态联编,必须使用(D)调用虚函数。 A.类名 B.派生类指针 C.对象名 D.基类指针 3.2下列函数中,不能说明为虚函数的是(C)。 A.私有成员函数 B.公有成员函数 C.构造函数 D.析构函数 3.3在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值(A)。 A.相同 B.不同 C.相容 D.部分相同 3.4当一个类的某个函数被说明为virtual时,该函数在该类的所有派生类中(A)。 A.都是虚函数 B.只有被重新说明时才是虚函数 C.只有被重新说明为virtual时才是虚函数 D.都不是虚函数 3.5(C)是一个在基类中说明的虚函数,它在该基类中没有定义,但要求任何派生类都必须定义自己的版本。 A.虚析构函数B.虚构造函数 C.纯虚函数D.静态成员函数 3.6 以下基类中的成员函数,哪个表示纯虚函数(C)。 A.virtual void vf(int);B.void vf(int)=0; C.virtual void vf( )=0;D.virtual void vf(int){ } 3.7下列描述中,(D)是抽象类的特性。 A.可以说明虚函数 B.可以进行构造函数重载 C.可以定义友元函数 D.不能定义其对象 3.8类B是类A的公有派生类,类A和类B中都定义了虚函数func( ),p是一个指向类A对象的指针,则p->A::func( )将(A)。

实验四 类的多态性与虚函数

实验四类的多态性与虚函数 (实验课时:2 实验性质:设计) 实验名称: 类的多态性与虚函数 实验目的: (1)了解多态性的概念; (2)了解虚函数的作用和使用方法; (3)了解纯虚函数和抽象类的概念和用法。 实验设备:(1)硬件:个人微机(配置不低于:CPU为P4,主频1.6G,内存256MB,硬盘40GB); (2)软件:操作系统为WindowsXP(或2000、server2003等),工具软件为Visual C++6.0。 实验内容: 事先编好程序,上机调试和运行程序,分析结果。 (1)编程:定义抽象基类Shape(图形)。 Shape类有一个公共的纯虚函数Area,用于派生类求图形的面积。 (2)由Shape派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数PrintArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。 在主程序中测试这些类的PrintArea函数。 (3)在类Circle基础上再派生一个圆柱体Cylinder,重载Area函数求圆柱体的体积。然后,编写主程序采用静态多态性和动态多态性分别测试Area函数。 (4)在类Circle中定义一个析构函数,让它输出一行信息“This is Cicle Destruction。”,在类Cylinder中定义一个析构函数,让它输出一行信息“This is Cylinder Destruction。”。 在主程序中用指向基类Circle类的指针动态生成Cylinder类对象,然后用delete 语句释放该对象,测试看看运行结果如何。再修改Circle的析构函数为虚函数,测试看看运行结果如何。 (5)运行上述程序,并分析结果。 实验要求: (1)掌握多态性的概念; (2)掌握虚函数的作用和使用方法; (3)掌握纯虚函数和抽象类的概念和用法; (4)程序格式规范,程序运行正确; (5)认真书写实验报告,如实填写各项实验内容。 实验步骤: (1)启动Visual C++6.0开发环境; (2)创建一个项目; (3)建立C++源程序文件; (4)编辑C++源程序文件内容; (5)建立并运行可执行程序,并分析结果; (6)关闭工作空间。 思考题:虚函数的作用是什么?、

实验6多态性与虚函数

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

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

实验三 多态性

河南**大学 实验报告 课程名称面向对象程序设计名称实验三多态性 院系_信息工程学院__ 班级__计科172 学生姓名_ ** __

实验三多态性 一.实验目的 本实验的目的是使学生了虚函数的作用,掌握多态的概念、编译时多态、运行时多态,掌握运算符重载和虚函数的用法。 二.实验环境 Visual C++ 6.0 及以上版本。 三.实验内容 熟悉掌握C++多态的相关知识。根据老师布置的实验题目,提前分析题目要求所需要的类,设计好解决题目要求需要的对象个数,设计解决问题需要的主函数等。题目可以从以下题目中选择一个。 1.定义一个实数类Real,类中包括一个数据成员real,构造函数、display()函数以及重载的+、-、*、/运算符。用公有继承方式声明一个复数类Complex,该类包括两个数据成员real,image,并重载Real类的函数和+、-、*、/运算符。编写一个复数四则运算计算器。 2.Shape是一个几何图形的基类,它至少有求自身周长函数Circumference()和求自身面积函数Area()。从Shape类派生出Circle类、Ellipse类、Triangle 类和Rectangle类,分别继承基类Shape的Circumference()和Area(),并增加新的成员。编写主函数,定义各派生类对象,求多派生类对象的周长之和、面积之和。 3.其它和本实验目的相符的题目,根据学生实际情况增加相应的题目,但题目难度不应低于以上两个题目。 注意:从以上题目中选择一个作为实验题目。 选择题目2 四、实验原理 1.按照题目要求分析解决问题需要的类; 2.进行类的设计并实现; 3.分析解决问题需要定义的对象及对象间的消息传递关系; 4.设计主函数实现题目要求。 五、数据结构和程序设计

多态与虚函数 练习题

多态与虚函数练习 选择题 单选题 1.要实现动态多态性,可以通过()调用虚函数。 A. 基类指针 B. 成员名限定 C. 对象名 D. 派生类名 2.以下()成员函数表示纯虚函数。 A. virtual int vf(int); B. void vf(int)=0; C. virtual void vf()=0; D. virtual void vf(int) { };

3.关于纯虚函数和抽象类的描述中,错误的是()。 A. 纯虚函数是一种特殊的虚函数,它没有具体的实现 B. 抽象类是指具有纯虚函数的类 C. 一个基类中说明有纯虚函数,该基类派生类一定不再是抽象类 D. 抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出 4.下面4个选项中,()是用来声明虚函数的。 A. virtual B. public C. using D. false 5.下列关于动态联编的描述中,错误的是()。 A. 动态联编是以虚函数为基础 B. 动态联编是运行时确定所调用的函数代码的 C. 动态联编调用函数操作是指向对象的指针或对象引用 D. 动态联编是在编译时确定操作函数的

6.关于虚函数的描述中,()是正确的。 A. 虚函数是一个静态成员函数 B. 虚函数是一个非成员函数 C. 虚函数既可以在函数说明时定义,也可以在函数实现时定义 D. 派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 7.下面关于友元的描述中,错误的是()。 A. 友元函数可以访问该类的私有数据成员 B. 一个类的友元类中的成员函数都是这个类的友元函数 C. 友元可以提高程序的运行效率 D. 类与类之间的友元关系可以继承 8.下面描述中,正确的是()。 A. virtual可以用来声明虚函数 B. 含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类

c++多态性相关习题

多态性 10.2 典型例题分析与解答 例题1:指出下列对定义重载函数的要求中,哪些是错误的提法。 A.要求参数的个数不同。 B.要求参数中至少有一个类型不同。 C.求函数的返回值不同。 D. 要求参数的个数相同时,参数类型不同。答案: C 例题3:下面关于友元的描述中,错误的是()。 A. 友元函数可以访问该类的私有数据成员 B. 一个类的友元类中的成员函数都是这个类的友元函数 C. 友元可以提高程序的运行效率 D. 类与类之间的友元关系可以继承 答案:D 1

例题4:下述静态成员的特性中,()是错误的。 A. 静态成员函数不能利用this指针 B. 静态数据成员要在类体外进行初始化 C. 引用静态数据成员时,要在静态数据成员名前加<类名>和作用域运算符 D. 静态数据成员不是所有对象所共有的 答案:D 例题5:关于虚函数的描述中,()是正确的。 A. 虚函数是一个静态成员函数 B. 虚函数是一个非成员函数 C. 虚函数既可以在函数说明时定义,也可以在函数实现时定义 D. 派生类的虚函数与基类中对应的虚函数具有相同的参数个数和类型 参考答案:D 2

例题11:分析下列程序的输出结果。 #include class A{ public: A() { cout<<"A's cons."<

c++多态性实验报告

实验3 多态性 实验课程名:面向对象程序设计(C++) 专业班级:学号:姓名: 实验时间:实验地点:指导教师: 3.1实验目的和要求 (1) 了解多态性的概念。 (2) 掌握运算符重载的基本方法。 (3) 掌握虚函数的定义和使用方法。 (4) 掌握纯虚函数和抽象类的概念和用法。

二、实验内容 一、构建一个复数类Complex,试对下列几个运算符进行重载:++,=,!=,+,-,==,其中要求要有成员重载形式和友元重载形式,而且,++运算符要求实现先加和后加两种形式。 该类定义原型说明: class complex { public: complex(double r=0,double i=0); complex &operator +(complex &c); complex operator -(complex &c); complex operator *(complex &c); friend complex operator /(complex &c1,complex &c2); friend int operator ==(complex &c1,complex &c2); friend int operator !=(complex &c1,complex &c2); //friend complex operator++(complex &c); complex operator++(); complex operator++(int); void disp(); private: double real; double imag; }; 实验代码如下: #include using namespace std; class complex { public: complex(){real=0;imag=0;} complex(double r,double i) { real=r;

相关文档