服务器之家

服务器之家 > 正文

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

时间:2021-12-29 14:07     来源/作者:我是小白呀

概述

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

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

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++多态性内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_46274168/article/details/116793926

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整
蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整 2021-08-24
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部