【C++学习】第六章多态与虚函数案例实现

这篇具有很好参考价值的文章主要介绍了【C++学习】第六章多态与虚函数案例实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

#include<iostream>
using namespace std;
class Shape{
    public:
    virtual float area() const {return 0.0;}
    virtual float volume() const {return 0.0;}
    virtual void shapeName() const = 0;
};

class Point:public Shape{
    public:
    Point(float=0, float=0);
    void setPoint(float, float);
    float getX() const{return x;}
    float getY() const{return y;}
    virtual void shapeName() const {
        cout << "Point:";
    }
    friend ostream & operator << (ostream &, const Point &);
    protected:
    float x,y;
};

class Circle:public Point{
    public:
    Circle(float x=0, float y=0,float r=0);
    void setRedius(float);
    float getR() const{return radius;}
    
    virtual void shapeName() const {
        cout << "Circle:";
    }
    float area() const;
    friend ostream & operator << (ostream &, const Circle &);
    protected:
    float radius;
};

class Cylinder:public Circle{
    public:
    Cylinder(float x=0, float y=0,float r=0,float h=0);
    void setHeight(float);
    float getHeight() const{return height;}
    
    virtual void shapeName() const {
        cout << "Cylinder:";
    }
    float area() const;
    float volume() const;
    friend ostream & operator << (ostream &, const Cylinder &);
    protected:
    float height;
};
Point::Point(float a, float b){
    x = a;
    y = b;
}
void Point::setPoint(float a, float b){
    x = a;
    y = b;
}
ostream & operator << (ostream & output, const Point &p){
    output <<"[p.x="<<p.x << ",p.y" << p.y <<"]";
    return output;
}

ostream & operator << (ostream & output, const Circle &c){
    output <<"[c.x="<<c.x << ",c.y" << c.y <<  ",c.redius"<< c.radius<<"]";
    return output;
}
Circle::Circle(float a, float b,float c):Point(a,b),radius(c){}
void Circle::setRedius(float r){
    radius = r;
}
float Circle::area() const {
    return 3.14 * radius * radius;
}

Cylinder::Cylinder(float a, float b,float c, float h):Circle(a,b,c),height(h){}
float Cylinder::area() const {
    return 3.14 * radius * radius + 2*3.14*radius*height;
}

float Cylinder::volume() const {
    return 3.14 * radius * radius *height;
}
ostream & operator << (ostream & output, const Cylinder &cy){
    output <<"[cy.x="<<cy.x << ",cy.y" << cy.y <<  ",cy.redius"<< cy.radius<< ",cy.height" <<cy.height<<"]";
    return output;
}
int main(){
    Point point(3.2, 4.5);
    Circle circle(2.4,12,18);
    Cylinder cylinder(1,2,3,4);
    point.shapeName();
    cout << point << endl;
    circle.shapeName();
    cout << circle << endl;
    cylinder.shapeName();
    cout << cylinder << endl;
    Shape *pt;
    pt = &point;
    pt->shapeName();
    cout << "x=" << point.getX() <<",y=" << point.getY() << "\n area=" << pt->area() <<"\n volumn="<<pt->volume() << "\n\n";
    pt = &circle;
    pt->shapeName();
    cout << "x=" << circle.getX() <<",y=" << circle.getY() << ",r=" << circle.getR() <<"\n area=" << pt->area() <<"\n volumn="<<pt->volume() << "\n\n";

    pt = &cylinder;
    pt->shapeName();
    cout << "x=" << cylinder.getX() <<",y=" << cylinder.getY() << ",r=" << cylinder.getR() <<"\n area=" << pt->area() <<"\n volumn="<<pt->volume() << "\n\n";
}

虚函数的作用就是为了实现多态,和php的延时绑定是一样的。
函数重载是静态的,在横向上的功能, 虚函数是类继承上的功能,是动态的。文章来源地址https://www.toymoban.com/news/detail-708241.html

到了这里,关于【C++学习】第六章多态与虚函数案例实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JavaWeb后端开发-第六章(1)】SpringBootWeb案例

         前面我们已经讲解了Web前端开发的基础知识,也讲解了Web后端开发的基础(HTTP协议、请求响应),并且也讲解了数据库MySQL,以及通过Mybatis框架如何来完成数据库的基本操作。 那接下来,我们就通过一个案例,来将前端开发、后端开发、数据库整合起来。 而这个案例

    2024年02月02日
    浏览(54)
  • 第六章 Python函数

    系列文章目录 第一章 Python 基础知识 第二章 python 字符串处理 第三章 python 数据类型 第四章 python 运算符与流程控制 第五章 python 文件操作 第六章 python 函数 第七章 python 常用内建函数 第八章 python 类(面向对象编程) 第九章 python 异常处理 第十章 python 自定义模块及导入方法

    2024年02月06日
    浏览(43)
  • 第六章 矩阵函数

    就是 f ( x ) 变成了 f ( A ) 就是 f(x) 变成了 f(A) 就是 f ( x ) 变成了 f ( A ) 难点在于 A k A^k A k 不好算。 解决方案是利用 J o r d a n Jordan J or d an 标准型来做。 f ( A ) = P d i a g ( f ( J 1 ) , f ( J 2 ) , … , f ( J r ) ) P − 1 Large f(A) = Pdiag(f(J_1),f(J_2),dots,f(J_r))P^{-1} f ( A ) = P d ia g ( f ( J 1 ​

    2024年02月04日
    浏览(35)
  • 【JavaWeb后端开发-第六章(3)】SpringBootWeb案例—登录认证

        在前面的章节中,我们已经实现了 部门管理 、 员工管理 的基本功能,但是大家会发现,我们并没有登录,就直接访问到了Tlias智能学习辅助系统的后台。 这是不安全的,所以我们今天的主题就是 登录认证 。 最终我们要实现的效果就是用户必须登录之后,才可以访

    2024年01月19日
    浏览(52)
  • 大数据之Spark案例实操完整使用(第六章)

    上面的数据图是从数据文件中截取的一部分内容,表示为电商网站的用户行为数据,主要包含用户的 4 种行为:搜索,点击,下单,支付。数据规则如下: ➢ 数据文件中每行数据采用下划线分隔数据 ➢ 每一行数据表示用户的一次行为,这个行为只能是 4 种行为的一种 ➢ 如

    2024年02月11日
    浏览(45)
  • python笔记:第六章函数&方法

    由系统提供,直接拿来用或是导入模块后使用 函数是结构化编程的核心 使用 def 来定义函数 为函数添加文档字符串 如果不自定义返回值,则无返回值 return 用明确的变量组来接受函数输出值,便于后期查看(序列解包),不用元组 标明函数的返回值 注意:这

    2024年02月13日
    浏览(46)
  • 【JavaWeb后端开发-第六章(4)】SpringBootWeb案例—事务&AOP

        在数据库阶段我们已学习过事务了,我们讲到:      事务 是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体,一起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功,要么同时失败。     怎么样来控制这组

    2024年01月19日
    浏览(55)
  • 《Python程序设计》 第六章 函数+编程题解

    目录 6-1 使用函数求特殊a串数列和 6-2 使用函数求素数和 6-3 使用函数统计指定数字的个数 6-4 使用函数输出指定范围内Fibonacci数的个数  6-5 使用函数求余弦函数的近似值 6-6 缩写词 7-1 输入列表,求列表元素和(eval输入应用) 7-2 一帮一 7-3 验证“哥德巴赫猜想” 7-4 列表或元组

    2024年02月07日
    浏览(67)
  • <c++>虚函数与多态 | 虚函数与纯虚函数 | 多态的实现原理 | 虚析构函数

    🚀 个人简介:CSDN「 博客新星 」TOP 10 , C/C++ 领域新星创作者 💟 作    者: 锡兰_CC ❣️ 📝 专    栏: 从零开始的 c++ 之旅 🌈 若有帮助,还请 关注➕点赞➕收藏 ,不行的话我再努努力💪💪💪 在上一篇文章中,我们介绍了 c++ 中类与对象的继承,继承可以根据一个或

    2023年04月18日
    浏览(39)
  • 第六章(7):Python中的函数—lambda表达式

    是一种匿名函数的定义方式,它可以替代函数定义的方式,使代码更加简洁和易读。Lambda表达式的语法形式为:lambda 参数列表: 表达式,其中参数列表和表达式都是可选的,但是在大多数情况下都需要用到它们。Lambda表达式通常被用在需要传递函数对象作为参数的函数中,也

    2024年02月08日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包