• 017_linuxC++之_多态的引入


    多态:一种接口,多种方法(同一种调用方法,根据不同的对象,调用不同类中的函数)
    静态联编:非虚函数,在编译时确定好
    动态联编:   1. 对象里有指针,指向虚函数表
          2. 通过指针,找到表,调用虚函数
          3. 图二
          4. virtual来定义为虚函数

    (一)首先我们来看静态联编,非多态的程序

     1 #include <iostream>
     2 #include <string.h>
     3 #include <unistd.h>
     4 
     5 using namespace std;
     6 
     7 class Human {
     8 public:
     9     void eating(void) { cout<<"use hand to eat"<<endl; }
    10 };
    11 
    12 class Englishman : public Human {
    13 public:
    14     void eating(void) { cout<<"use knife to eat"<<endl; }
    15 };
    16 
    17 
    18 class Chinese : public Human {
    19 public:
    20     void eating(void) { cout<<"use chopsticks to eat"<<endl; }
    21 };
    22 
    23 void test_eating(Human& h)
    24 {
    25     h.eating();
    26 }
    27 
    28 int main(int argc, char **argv)
    29 {
    30     Human h;
    31     Englishman e;
    32     Chinese c;
    33 
    34     test_eating(h);
    35     test_eating(e);
    36     test_eating(c);
    37 
    38     return 0;
    39 }
    View Code

    运行结果,调用的全部是Human中的,并不是我们想要的,因为这里是静态编译进去了,也就是说程序在编译时候就已经确定好就调用Human中的

    (二)动态编译,实现多态,在类中定义时候增加virtual来实现这个函数为虚函数

     1 #include <iostream>
     2 #include <string.h>
     3 #include <unistd.h>
     4 
     5 using namespace std;
     6 
     7 class Human {
     8 public:
     9     virtual void eating(void) { cout<<"use hand to eat"<<endl; }
    10 };
    11 
    12 class Englishman : public Human {
    13 public:
    14     virtual void eating(void) { cout<<"use knife to eat"<<endl; }
    15 };
    16 
    17 
    18 class Chinese : public Human {
    19 public:
    20     virtual void eating(void) { cout<<"use chopsticks to eat"<<endl; }
    21 };
    22 
    23 void test_eating(Human& h)
    24 {
    25     h.eating();
    26 }
    27 
    28 int main(int argc, char **argv)
    29 {
    30     Human h;
    31     Englishman e;
    32     Chinese c;
    33 
    34     test_eating(h);
    35     test_eating(e);
    36     test_eating(c);
    37 
    38     return 0;
    39 }
    View Code

    运行结果,就实现了同一接口,不同调用的方法了

    (三)更多具体的,,,,,,,

  • 相关阅读:
    edu_6_1_4
    edu_6_1_2
    edu_6_1_3
    edu_6_1_1
    音乐链接
    音乐推荐界面
    客服页面
    购物页面
    京东读书新闻资讯页面
    安装Tomcat时 ,设置JAVA_HOME和JRE_HOME
  • 原文地址:https://www.cnblogs.com/luxiaoguogege/p/9696061.html
Copyright © 2020-2023  润新知