C/C++中多态性详解及其作用介绍

 更新时间:2021年09月06日 15:50:50   作者:我是小白呀  
这篇文章主要介绍了C/C++中多态性(polymorphism)详解及其作用介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

概述

多态性 (polymorphism) 是面向对象程序设计的一个重要特征. 利用多态性扩展设计和实现一个易于扩展的系统.

在这里插入图片描述

C++ 中多态性:

  • 同一函数名可以实现不同的功能
  • 用一个函数名调用不同内容的函数完成不同的工作

静态多态

静态多态 (static polymorphism) 是通过函数的重载实现的, 包括函数的重载和运算符重载. 在程序编译时系统就能觉得调用哪个函数.

函数重载

int main() {
    cout << max(1,2) << endl;
    cout << max(1.2, 2.3) << endl;

    return 0;
}

int max(int a, int b) {
    return (a > b) ? a:b;
}

double max(double a, double b){
    return (a > b) ? a:b;
}

输出结果:

2
2.3

运算符重载

int main() {
    Complex c1(2, 4), c2(6, 10);
    c1 = c1 + c2;
    c1.display();

    return 0;
}

Complex Complex::operator+(Complex &c) {
    return Complex(real + c.real, imag + c.imag);
}

输出结果:

(8, 14i)

动态多态

动态多态 (dynamic polymorphism) 是在程序运行中才动态地确定操作所针对的对象.

非动态

Person 类:

#ifndef PROJECT6_PERSON_H
#define PROJECT6_PERSON_H

#include <iostream>
#include <string>
using namespace std;

class Person {
private:
    string name;  // 姓名
    char gender;  // 性别
public:
    Person(string n, char g) : name(n), gender(g) {}
    void display() {
        cout << "name: " << name << endl;
        cout << "gender: " << gender << endl;
    }
};

#endif //PROJECT6_PERSON_H

Teacher 类:

#ifndef PROJECT6_TEACHER_H
#define PROJECT6_TEACHER_H

#include <iostream>
#include <string>
#include "Person.h"
using namespace std;

class Teacher : public Person {
private:
    string title;  // 头衔
public:
    Teacher(string n, char g, string t) : Person(n, g), title(t) {}
    void display() {
        Person::display();
        cout << "title: " << title << endl;
    }
};

#endif //PROJECT6_TEACHER_H

main:

#include <iostream>
#include "Person.h"
#include "Teacher.h"

int main() {
    // 创建对象
    Person p1("王叔叔", 'm'), *pt;  // 指针类型为
    Teacher t1("王老师", 'f', "教导主任");

    pt = &p1;
    pt->display();
    pt = &t1;
    pt->display();

    return 0;
}

输出结果:

name: 王叔叔
gender: m
name: 王老师
gender: f

我们可以发现 Teacher 对象的头衔并没有输出, 因为 pt 指针的类型是 Person, 调用的是 Person 的display()函数.

动态

我们把show()函数声明为虚函数.

Person 类:

#ifndef PROJECT6_PERSON_H
#define PROJECT6_PERSON_H

#include <iostream>
#include <string>
using namespace std;

class Person {
private:
    string name;  // 姓名
    char gender;  // 性别
public:
    Person(string n, char g) : name(n), gender(g) {}
    virtual void display() {
        cout << "name: " << name << endl;
        cout << "gender: " << gender << endl;
    }
};

#endif //PROJECT6_PERSON_H

main:

#include <iostream>
#include "Person.h"
#include "Teacher.h"

int main() {
    // 创建对象
    Person p1("王叔叔", 'm'), *pt;  // 指针类型为
    Teacher t1("王老师", 'f', "教导主任");

    pt = &p1;
    pt->display();
    pt = &t1;
    pt->display();

    return 0;
}

输出结果:

name: 王叔叔
gender: m
name: 王老师
gender: f
title: 教导主任

到此这篇关于C/C++中多态性详解及其作用介绍的文章就介绍到这了,更多相关C++多态性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言近万字为你讲透栈和队列

    C语言近万字为你讲透栈和队列

    对于线性表,我们可能要执行下列操作:访问表的第k个结点、在k这个结点之前或者之后插入一个新结点,抑或是删除第k个结点等等操作,其中我们会遇到值对第一个或者最后一个结点插入、删除、和访问值的线性表,我们给它们以特殊的名称:栈、队列、双端队列
    2022-05-05
  • 基于MFC实现类的序列化详解

    基于MFC实现类的序列化详解

    序列化是将程序中的对象以一种二进制格式存储到存储设备中(例如文本/数据库等),以实现“永生”或随意“流动”。本文将为大家详细讲讲如何基于MFC实现类的序列化,需要的可以参考一下
    2022-07-07
  • C++简单又轻松的讲解类和对象中友元函数

    C++简单又轻松的讲解类和对象中友元函数

    采用类的机制后实现了数据的隐藏与封装,类的数据成员一般定义为私有成员,成员函数一般定义为公有的,依此提供类与外界间的通信接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该类的友元函数
    2022-06-06
  • C语言深入回顾讲解结构体对齐

    C语言深入回顾讲解结构体对齐

    C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许你存储不同类型的数据项,本篇让我们来了解C 的结构体内存对齐
    2022-06-06
  • C++ 逗号运算符的具体使用

    C++ 逗号运算符的具体使用

    本文主要介绍了C++ 逗号运算符的具体使用,使用逗号运算符是为了把几个表达式放在一起,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • C++中的Z字形变换问题

    C++中的Z字形变换问题

    将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列,这样一个需求怎么实现呢,下面小编给大家带来了C++中的Z字形变换问题,需要的朋友可以参考下
    2022-07-07
  • C语言平衡二叉树详解

    C语言平衡二叉树详解

    这篇文章主要介绍了C语言平衡二叉树的相关资料,需要的朋友可以参考下,小编觉得这篇文章写的还不错,希望能够给你带来帮助
    2021-11-11
  • C++关于size_t的bug解决案例

    C++关于size_t的bug解决案例

    这篇文章主要为大家介绍了C++关于size_t的bug解决案例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Qt中常用对话框使用技巧及注意事项

    Qt中常用对话框使用技巧及注意事项

    Qt 为应用程序设计提供了一些常用的标准对话框,如打开文件对话框、选择颜色对话框、信息提示和确认选择对话框、标准输入对话框等,这篇文章主要给大家介绍了关于Qt中常用对话框使用技巧及注意事项的相关资料,需要的朋友可以参考下
    2024-04-04
  • C++分析构造函数与析造函数的特点梳理

    C++分析构造函数与析造函数的特点梳理

    本文对类的构造函数和析构函数进行总结,主要包括了构造函数的初始化、重载、使用参数和默认参数,拷贝构造函数和析构函数,希望能帮助读者在程序开发中更好的理解类,属于C/C++基础
    2022-05-05

最新评论