C++ 多态类型
创始人
2024-01-20 07:45:10
0

多态

C++在面向对象中,多态就是不同对象收到相同消息,执行不同的操作。在程序设计中,多态性是名字相同的函数,这些函数执行不同或相似的操作,这样就可以用同一个函数名调用不同内容的函数。简而言之“一个接口,多种方法”。
多态是以封装和继承为基础的。

多态中的重载、重写和重定义

  • 重载overload:重载函数处在同一作用域(在同一个类中).;
    • 函数名相同、返回值相同、参数列表必须不同;
    • 函数名相同、返回值不同、参数列表不同
  • 重写(覆盖)override:必须是虚函数,且处在父类和子类中;
    • 返回值,参数列表,函数名必须完全相同;
  • 重定义(隐藏)redefining:子类和父类的成员变量相同或者函数名相同,子类隐藏父类的对应成员;
    • 子类和父类的同名非虚函数,但参数列表相同;

C++ 多态分类:

主要分为静态多(编译阶段实现),是由函数重载实现,通过不同的实参调用其相应的同名函数;动态多态通过虚函数实现,基类指针指向子类对象。
主要分成下面这四种类型

The Four Polymorphisms in C++

  • 参数多态(编译期):返回值相同,参数列表不同
  • 重载多态(编译期):函数重载、运算符重载,重定义基类函数
  • 子类型多态(运行期):虚函数
  • 强制多态(编译期/运行期):基本类型转换、自定义类型转换

代码释义

#include 
#include 
using namespace std;
class I_SoftWare {
public:virtual ~I_SoftWare(){};//运行期多态virtual void RunApp() { std::cout << " Interface SoftWare " << std::endl; };//编译器多态void BaseName() { std::cout << " I am Interface SoftWare " << std::endl; };//参数多态void RunTime(int run_time) { std::cout << __FUNCTION__ << " int= " << run_time << std::endl; }void RunTime(double run_time) { std::cout << __FUNCTION__ << " double= " << run_time << std::endl; }void RunTime(int run_time1, int run_time2){std::cout << __FUNCTION__ << " run_time1= " << run_time1 << " run_time2= " << run_time2 << std::endl;}string RunTime(string a, string b){std::string result(a);result += b;std::cout << __FUNCTION__ << " string= " << result << std::endl; return result;}
};
class StreamLiveApp : public I_SoftWare {
public://重写void RunApp() { std::cout << " Start Live APP " << std::endl; }//重定义(隐藏父类的方法)void BaseName() { std::cout << " I am StreamLiveApp " << std::endl; };
};
class IMChatApp : public I_SoftWare {
public://重写void RunApp() { std::cout << " Start Chat APP " << std::endl; }
};int main()
{StreamLiveApp obj_live_app;IMChatApp     obj_chat_app;std::shared_ptr live_app = std::make_shared();std::shared_ptr chat_app = std::make_shared();std::cout << "================================" << std::endl; //1. 同名函数不同的参数列表:参数多态(编译时确定)live_app->RunTime(99);live_app->RunTime(3.14);live_app->RunTime(99, 1);std::cout << "================================" << std::endl; //2 .重载多态(编译时确定)//重定义:obj_live_app.BaseName();obj_chat_app.BaseName();//同一个类中重载方法,obj_live_app.RunTime("N", "B");obj_live_app.RunTime(1, 2);//指针不可以live_app->BaseName();chat_app->BaseName();std::cout << "================================" << std::endl; //3. 虚函数重写:子类型多态live_app->RunApp();chat_app->RunApp();std::cout << "================================" << std::endl; //4. 强制多态double a= 6;  int    b = 3.14;cout << "a=" << a << " b=" << b << endl;return 0;
}

运行结果:
在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...