当前位置:首页 > 后端开发 > 正文内容

什么是多态?面向对象中对多态的了解

邻居的猫1个月前 (12-09)后端开发679

本文原文来自:什么是多态?面向目标中对多态的了解

什么是多态

多态(Polymorphism)是面向目标编程(OOP)中的一个中心概念,它答应目标以多种形式呈现。多态性使得同一个接口能够用于不同的数据类型,然后使得代码愈加灵敏和可扩展。

简略来说,多态便是一个接口,一个类,一个抽象类,一个类里边的办法,不同类的同一个办法,都能够有多种完成,这个在面向目标里边,就对应着承继、重载、重写等详细的方法。

多态的长处长处:

  • 灵敏性:多态性答应同一个接口用于不同的目标,然后使得代码愈加灵敏。
  • 可扩展性:能够在不修正现有代码的情况下,经过增加新的类来扩展程序的功用。
  • 代码重用:经过多态性,能够编写愈加通用和可重用的代码。

多态性是面向目标编程中的一个重要特性,它答应目标以多种形式呈现,然后使得代码愈加灵敏和可扩展。经过编译时多态(如函数重载和运算符重载)和运行时多态(如虚函数和接口),能够完成不同的多态性行为。

多态的类型

多态性首要分为两种类型:

  • 编译时多态(静态多态):
    • 函数重载(Function Overloading):同一个函数名能够有不同的参数列表,然后完成不同的功用。
    • 运算符重载(Operator Overloading):答应用户界说或重界说运算符的行为。
  • 运行时多态(动态多态):
    • 虚函数(Virtual Functions):经过基类指针或引证调用派生类的函数,完成动态绑定。
    • 接口和抽象类:经过接口或抽象类界说一致的接口,不同的类能够完成这些接口,然后完成多态性。

编译时多态的比如

函数重载

#include <iostream>

class Print {
public:
    void show(int i) {
        std::cout << "Integer: " << i << std::endl;
    }

    void show(double d) {
        std::cout << "Double: " << d << std::endl;
    }

    void show(const std::string& s) {
        std::cout << "String: " << s << std::endl;
    }
};

int main() {
    Print p;
    p.show(5);          // 输出: Integer: 5
    p.show(3.14);       // 输出: Double: 3.14
    p.show("Hello");    // 输出: String: Hello

    return 0;
}

运算符重载

#include <iostream>

class Complex {
public:
    double real, imag;

    Complex(double r = 0, double i = 0) : real(r), imag(i) {}

    Complex operator + (const Complex& other) {
        return Complex(real + other.real, imag + other.imag);
    }

    void display() {
        std::cout << real << " + " << imag << "i" << std::endl;
    }
};

int main() {
    Complex c1(3.0, 4.0), c2(1.0, 2.0);
    Complex c3 = c1 + c2;
    c3.display();  // 输出: 4 + 6i

    return 0;
}

运行时多态的比如

虚函数

#include <iostream>

class Base {
public:
    virtual void show() {
        std::cout << "Base class show function" << std::endl;
    }
};

class Derived : public Base {
public:
    void show() override {
        std::cout << "Derived class show function" << std::endl;
    }
};

int main() {
    Base* basePtr;
    Derived derivedObj;
    basePtr = &derivedObj;

    basePtr->show(); // 输出: Derived class show function

    return 0;
}

接口和抽象类

#include <iostream>

class Shape {
public:
    virtual void draw() = 0; // 纯虚函数
};

class Circle : public Shape {
public:
    void draw() override {
        std::cout << "Drawing Circle" << std::endl;
    }
};

class Square : public Shape {
public:
    void draw() override {
        std::cout << "Drawing Square" << std::endl;
    }
};

int main() {
    Shape* shape1 = new Circle();
    Shape* shape2 = new Square();

    shape1->draw(); // 输出: Drawing Circle
    shape2->draw(); // 输出: Drawing Square

    delete shape1;
    delete shape2;

    return 0;
}

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=202

分享给朋友:

“什么是多态?面向对象中对多态的了解” 的相关文章

go数组, 数组的定义与初始化

go数组, 数组的定义与初始化

Go语言中的数组是一种基本的数据结构,它是一个固定大小的、元素类型相同的序列。数组在Go中是一个值类型,这意味着当你将一个数组赋值给另一个变量或传递给函数时,实际上是在复制整个数组。 基本概念 类型:数组由元素类型和大小组成,例如 `int` 表示一个包含5个整数的数组。 声明:你可以使用 `var...

go ping,Go语言简介

在Go语言中,实现ping功能有多种方法,包括使用第三方库和手动实现。以下是几种常见的方法: 使用第三方库1. goping库: 简介:goping是一个简洁但功能强大的ICMP回显(ping)库,可以发送和接收ICMP数据包。 安装:使用`go get u github.com/gop...

java官方网站,java官网

java官方网站,java官网

1. Java官方网站(Oracle): 2. 适用于所有操作系统的Java下载: 3. 适用于Windows的Java下载: 这些网站提供了Java的最新版本、功能介绍、许可证信息以及下载和安装指导。如果您需要JDK或JRE,可以访问上述链接获取详细信息。Java...

python随机数,功能与应用

python随机数,功能与应用

生成的随机浮点数是 0.626538175575775,它在0到1之间。如果您有其他关于随机数的生成或使用的问题,请随时告诉我!Python随机数生成器:功能与应用在编程中,随机数生成是一个常见的需求,Python 提供了多种方式来生成随机数。本文将介绍 Python 中随机数生成的基本概念、常用库...

java连接数据库

java连接数据库

Java连接数据库通常涉及以下几个步骤:1. 加载数据库驱动:首先需要加载数据库的驱动程序。这通常通过调用 `Class.forName` 方法完成。2. 建立数据库连接:使用 `DriverManager.getConnection` 方法来建立与数据库的连接。你需要提供数据库的URL、用户名和密...

swift查询,如何轻松查询银行的SWIFT代码

查询SWIFT代码1. 全球银行SWIFT Codes...