C++中的多态

今天我想给自己写点东西
最近感觉遇到了瓶颈,博客也有一段时间没有更新了,这段时间很迷茫很困惑,感觉不知道如何去学C++了,也没有了当初的那种热情。学习C++也有一段时间了,当自己想要去实现一个项目的时候才发现自己的不足,没有头绪,完全不知从何下手。然后就这样浑浑噩噩的度过了一段时间。有时候也在想自己是不是不适合编程,后来也想通了,自己下定决心要做的事难道就这么放弃了吗?这不是我!加油吧!!!

1.1.对C++多态的理解:
如果有几个似而不完全相同的对象,有时我们要求在向它们发出同一个消息时,它们的反应各自不同,分别执行不同的操作。这种现象就是多态现象。
举个例子:ABC3个班是高三年级,他们有基本相同的属性和行为,在同时听到上课铃声的时候,他们会分别走向3个不同的教室,而不会走向同一个教室。
多态的意义:
由继承而产生的相关的不同的类,其对象对同一消息做出的不同响应。(能增加程序的灵活性,可减轻系统升级,维护,调试的工作量和复杂度)

1.2.多态实现的前提:
赋值兼容:需要积累对象的任何地方都可以使用公有派生类的对象来替代。赋值兼容是一种默认行为,不需要任何的显示转化步骤。

赋值兼容中所指的替代包括以下几种情况:
1、派生类的对象可以赋值给基类对象。
2、派生类的对象可以初始化基类的引用。
3、派生类对象的地址可以赋给指向基类的指针。
在替代之后,派生类对象就可以作为基类的对象使用,但只能使用从基类继承的成员。

#include <iostream>
using namespace std;
class Shape
{
public:
    Shape(int x,int y)
        :_x(x),_y(y){}
void draw()
{
    cout<<"draw Shap ";
    cout<<"start ("<<_x<<","<<_y<<") "<<endl;
}
//private:
protected:
    int _x;
    int _y;
};
class Circle:public Shape
{
public:
    Circle(int x, int y,int r)
        :Shape(x,y),_r(r){}
void draw()
{
    cout<<"draw Circle ";
    cout<<"start ("<<_x<<","<<_y<<") ";
    cout<<"radio r = "<<_r<<endl;
}
private:
    int _r;
};
int main()
{
    Shape s(3,5);
    s.draw();
    Circle c(1,2,4);
    c.draw();

    s = c;
    s.draw();//派生类对象给基类赋值;

    Shape &rs = c;//派生类的对象初始化基类的引用;
    rs.draw();

    Shape *ps = &c;//派生类对象的地址赋值给指向基类的指针;
    ps->draw();

    return 0;
}

1.3.多态形成的条件
1.3.1.静多态,通过命名傾栈在编译阶段决定(函数重载)
1.3.2.动多态,在运行阶段决定,不是在编译阶段决定。
1.4.虚函数

格式
class 类名
{
        virtual 函数声明;
};

虚函数小结
1.在基类中用virtual声明成员函数为虚函数,类外实现虚函数时,不用再加vritual。
2.在派生类中重新定义此函数称为覆写,要求函数名、返回类型、函数参数个数及类型全部匹配。并根据派生类的需要重新定义函数体。
3.当一个成员函数被声明为虚函数后,其派生类中完全相同的函数(显示的写出)也为虚函数。可以在其前加virtual以似清晰。
4.定义一个指向基类对象的指针,并使其指向其子类的对象,通过该指针调用虚函数,此时调用的就是指针变量指向对象的同名函数。

纯虚函数

**格式**
class 类名
{
    virtual 函数声明 = 0;
};

举个勺子
Shape 类中
virtual void draw() = 0;
Circle 类中

void draw()
{
    cout << "draw Circle";
    cout << "start (" << _x << "," << _y << ")";
    cout << "radio r = " << _r << endl;
}

测试

int main()
{
    Shape s(1,2);//纯虚函数又称抽象基类;
    Circle c(1,2,3);
    Rect r(1,2,3,5);

    Shape *pc = &c;
    pc->draw();

    pc = &r;
    pc->draw();
    return 0;
}

纯虚函数小结
1.含有纯虚函数的类称为抽象基类,不可实例化(即不能创建对象)。存在的意义就是被继承,提供公共接口
2.纯虚函数只有声明,没有实现。

含有虚函数的析构
含有虚函数的类,析构函数也应该声明为虚函数。在delete分类指针的时候,会调用类的析构函数,实现完整析构。

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值