C++实验:多态性与虚函数

C++实验:多态性与虚函数

1. 实验目的

(1) 了解多态性的概念。

(2) 了解虚函数的作用及使用方法。

(3) 了解静态关联和动态关联的概念和用法。

(4) 了解纯虚函数和抽象类的概念和用法。

2.实验内容

事先编写好程序,上机调试和运行程序,分析结果。

(1)声明Point (点)类,由Point类派生出Circle (圆)类,再由Circle类派生出Cylinder (圆柱体)类。将类的定义部分分别作为3个头文件,对它们的成员函数的声明部分分别作为3个源文件( .cpp文件),在主函数中用#include命令把它们包含进来,形成一个完整的程序,并上机运行。

(2)在教材第12章例12.3的基础上作以下修改,并作必要的讨论。

A.把构造函数修改为带参数的函数,在建立对象时初始化。

B.先不将析构函数声明为virtual,在main函数中另设一个指向 Circle 类对象的指针变量,使它指向grad1.运行程序,分析结果。

C.不作第B点的修改而将析构函数声明为virtual,
运行程序,分析结果。

(3)声明抽象基类Shape, 由它派生出3个派生类: Circle (圆形)、Rectangle (矩形)、Triangle
(三角形),用一个函数printArea分别输出以上三者的面积,3个图形的数据在定义对象时给定。

3.源代码

//Point.h
#include<iostream>
using namespace std;
class Point
{
   
    public:
    Point(float =0,float =0);
    void setPoint(float,float);
    float getX() const{
   return x;}
    float getY() const{
   return y;}
    friend ostream &operator<<(ostream&,const Point &);
    protected:
         float x,y;   

}; 

//Circle.h
#include"point.h"
using namespace std;
class Circle:public Point
{
   
    public:
         Circle(float x=0,float y=0,float r=0);
    void setRadius(float);
    float getRadius() const;
    float area() const;
    friend ostream &operator<<(ostream&,const Circle &);
         protected:
         float radius;
};

//Cylinder.h
#include<iostream>
#include"circle.h"
using namespace std;
class Cylinder:public Circle
{
   
    public:
         Cylinder(float x=0,float y=0,float r=0,float h=0);
    void setHeight(float);
    float getHeight() const;
    float area() const;
    float volume() const;
    friend ostream&operator<<(ostream&,const Cylinder&);
    protected:
         float height;
}; 

//Point.cpp
#include"point.h"
Point::Point(float a
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
多态性是面向对象编程中的一个重要概念,它允许不同的对象对同一个消息做出不同的响应。在C++中,通过虚函数实现多态性。在引用中的第一个程序中,定义了一个基类ONE和两个派生类TWO和THREE。基类ONE中定义了一个虚函数f(),派生类TWO和THREE都对该虚函数进行了重写。在main函数中,通过指针p调用了基类ONE和派生类THREE中的f()函数。由于f()函数是虚函数,在运行时会根据指针的实际类型来确定调用哪个版本的f()函数。因此,在p指向派生类THREE的对象时,调用的是派生类THREE中的f()函数。这就是多态性的体现。中的程序二中,定义了一个基类Base和一个派生类SubClass。基类Base中定义了一个虚函数fn(),派生类SubClass对该虚函数进行了重写。在main函数中,通过指针p分别调用了基类Base和派生类SubClass中的fn()函数。同样地,由于fn()函数是虚函数,在运行时会根据指针的实际类型来确定调用哪个版本的fn()函数。因此,当p指向派生类SubClass的对象时,调用的是派生类SubClass中的fn()函数。这也是多态性的一种表现形式。中的程序中,定义了一个类A和一个派生类B。类A中有两个私有的整型变量a和b,并定义了构造函数进行初始化,以及成员函数geta()和getb()来获取a和b的值。派生类B从类A继承并覆盖了geta()函数,使其返回a的两倍。在main函数中,声明了一个类B的对象,并调用了该对象中的geta()函数,将结果输出。这里也涉及到了多态性,因为通过指针p调用的是派生类B中的geta()函数,而不是基类A中的geta()函数。123 #### 引用[.reference_title] - *1* *2* *3* [C++实验8报告多态性虚函数](https://blog.csdn.net/qq_44621510/article/details/90724548)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阡陌笙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值