首页 > 编程语言 >C++中什么是多态,多态需要满足什么条件,怎么使用,它的实现原理是什么?

C++中什么是多态,多态需要满足什么条件,怎么使用,它的实现原理是什么?

时间:2023-04-25 19:34:55浏览次数:39  
标签:函数 子类 什么 多态 C++ virtual Animal 父类

概念:

  多态是指一个接口,根据传入的参数不同,呈现多种多态,多态分为静态多态和动态多态。

  静态多态:像函数重载和运算符重载属于静态多态,复用函数名。它的函数地址在编译阶段就已经确定了。

  动态多态:通过派生类和虚函数实现运行时多态(有子类继承,子类重写父类虚函数),它的函数地址在运行时确定。

  多态需要满足的条件:1、子类继承父类  2、子类重写父类中的虚函数。

  怎么使用多态:父类指针或引用指向子类对象   (Animal & animal = cat 或者 Animal *animal = new cat)

  示例:

     

 1 #include<iostream>
 2 using namespace std;
 3 
 4 class Animal
 5 {
 6 public:
 7     virtual void speak()   //必须加virtual,继承就继承指针了,不加virtual,子类继承后也是是空类size(1)
 8     {
 9         cout << "动物在说话" << endl;
10     }
11 };
12 
13 class Cat :public Animal
14 {
15 public:
16     //子类必须实现,不实现的话,还是继承父类的&Animal::speak
17     void speak()
18     {
19         cout << "小猫在说话" << endl;
20     }
21 };
22 
23 void DoSpeak(Animal& animal)  
24 {
25     animal.speak();
26 }
27 
28 class Dog :public Animal
29 {
30 public:
31     void speak()
32     {
33         cout << "小狗在说话" << endl;
34     }
35 
36 };
37 void test01()
38 {
39     Cat cat;
40     DoSpeak(cat);//多态的使用,Animal & animal =cat,或者Animal *animal=new Cat;
41 
42     Dog dog;
43     DoSpeak(dog);
44 }
45 int main()
46 {
47     test01();
48 
49     system("pause");
50 
51     return 0;
52 }
实现原理:
   在vs中k开发者命令工具中,可以通过命令:cl /d1 reportSingleClassLayout类名 “xxx.cpp”
   可以查看单类布局报告,如下图:

 

 



 

标签:函数,子类,什么,多态,C++,virtual,Animal,父类
From: https://www.cnblogs.com/py369/p/17353605.html

相关文章

  • C++深拷贝与浅拷贝
    浅拷贝的问题默认提供的拷贝构造就是浅拷贝,如果拷贝的对象中含有成员指针变量指向堆区中的内存空间,那么就会出现两个对象中的成员指针变量指向同一块堆区空间,当方法执行结束后,对象就会被释放,调用析构函数(析构函数中存在释放在堆区开辟的内存空间),就会存在一块内存空间被多次释放......
  • Java中为什么重写equals()也需要重写hashCode()?
    所有类默认继承Object类先看一下Object源码packagejava.lang;publicclassObject{ //默认调用本地的hashcode()方法根据内存地址生成hash值避免不了哈希冲突 publicnativeinthashCode(); //默认调用的equals方法比较的是'=='比较 //基本类型比较的是两者的值是否......
  • c++遍历搜索关键字
    #include<iostream>#include<windows.h>#include<string.h>#include<strsafe.h>#defineMAX_INPUT_LENGTH255usingnamespacestd;voidprintMemory(char*location,longsize){ printf("\n\n---------------------location......
  • 为什么软件测试外包公司更受软件企业欢迎?软件测试报告需要多少钱?
    劳动派遣或劳务派遣的用工模式古已有之,是人力资源销售市场不可避免的态势。软件测试顺应时代开展检测业务外包这一行业细分领域,越来越多软件外包公司尤其是小微型企业慢慢意识到了软件测试业务外包通常能够持续减少企业的各种成本费,使企业的利润最大化。一、什么叫软件测试......
  • 我总结的一些 C++ 高频面试题(收藏)
    extern“C”extern是C/C++语言中表明函数和全局变量作用范围的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。被extern"C"修饰的变量和函数是按照C语言方式编译和连接的。extern“C”这个声明的真实目的:解决名字匹配问题,实现C++与C的混合......
  • c++11 std::forward使用场景以及作用
    不使用 std::forward时,下述代码G不管传入什么类型的参数,只会最终调用 voidF(int&a);usingnamespacestd; voidF(int&a){  cout<<"int&version"<<a<<endl;} voidF(int&&a){  //dosomething  cout<<"in......
  • C++语言亚马逊国际获取AMAZON商品详情 API接口
    跨境电子商务是一种全新的互联网电商模式,运用电子化方式促成线上跨境交易,利用跨境物流运送商品,有利于打破传统的贸易格局,成为新的经济增长点。对我国来说,跨境电商平台正用一种全新的力量改变我国产业链的结构,并有利于增加贸易机会,拓展我国外贸在国际市场的广度与深度,赢得广阔的海......
  • 名字修饰约定: extern "C"、extern "C++" 和__stdcall、__cdecl相关的约定、__imp_前
    关于extern_C通常,在C语言的头文件中经常可以看到类似下面这种形式的代码#ifdef__cplusplusextern"C"{#endif/****somedeclarationorso*****/#ifdef__cplusplus}#endif/*endof__cplusplus*/那么,这种写法什么用呢?实际上,这是为了让CPP能够与C......
  • 广州app软件开发公司要评估什么指标?四个指标至关重要
      在找一个开发公司帮助自己开发app软件的时候,不少企业都会挑花了眼,不知道从何下手。针对这种情况,我们就要评估一些指标。那么广州app软件开发公司要评估什么指标?下面名锐讯动为大家讲述四个指标至关重要。 1.技术团队。衡量一个开发公司实力的重要指标毫无疑问就是技术团队,......
  • 《c++徒步》方法篇
    按值传递和按地址传递参考链接:https://blog.csdn.net/scrence/article/details/79835572参考链接:https://www.jb51.net/article/250343.htm1、按值传递#include<iostream>usingnamespacestd;voidchangeNumber(intx);intmain(void){ inta=10; cout<<"a="......