美文网首页技术杂谈
什么是多态?面向对象中对多态的理解

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

作者: 张飞的猪 | 来源:发表于2024-10-29 22:12 被阅读0次

本文原文来自:什么是多态?面向对象中对多态的理解

什么是多态

多态(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;
}

相关文章

  • 安卓面试:java部分

    1. 面向对象的三大特性,如何理解其中的多态?* 三大特性:封装、继承、多态* 多态是指允许不同的子类型的对象对同...

  • 多态的C++实现

    多态的C++实现 1 多态的原理 什么是多态?多态是面向对象的特性之一,只用父类指针指向子类的对象。 1.1 多态...

  • 多态

    面向对象特征之三:多态性 1、理解多态性:一个事物的多种形态 2、什么是多态性?对象的多态性:父类的引用指向子类的...

  • 多态

    1.什么是多态?在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描...

  • Java面向对象三大特性之多态

    多态(Polymorphism) 1. 什么是多态呢? 多态是面向对象程序设计(OOP)的一个重要特征,多态的字面...

  • Java基础面试题

    01. 面向对象的四个特性;对多态的理解(多态的实现以及多态在项目中的使用); 四个特性:抽象:是将一类对象的共同...

  • 多态

    理解多态 多态,即多种形态,面向对象程序设计语言当中最核心的特征,理解多态能帮助我们更好的进行程序设计。 生活中的...

  • OC面向对象—多态

    OC面向对象—多态 OC面向对象—多态 一、基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没...

  • 百度面试题JVM+算法+Redis+数据库

    一面: 1. Java中的多态 面向对象编程有三大特性:封装、继承、多态 多态:指允许不同类的对象对同一消息做出...

  • PHP面试会问到的一些问题整理

    什么是面向对象(OOP): 概念:封装、多态、继承(多态字面理解,多种形态。使用同一个方法,出现不同的产出。比如定...

网友评论

    本文标题:什么是多态?面向对象中对多态的理解

    本文链接:https://www.haomeiwen.com/subject/fytvdjtx.html