概述
多態性 (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++多態性內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/weixin_46274168/article/details/116793926