zoukankan      html  css  js  c++  java
  • C++

    虚函数使用

    虚函数:在基类中加了 virtual 关键字的函数就是虚函数。

    虚函数原理

    虚函数实现原理:虚函数表和虚函数指针。

    虚函数和纯虚函数的区别

    1. 定义一个函数为虚函数,不代表函数为不被实现的函数;定义一个函数为纯虚函数,才代表函数没有被实现。

    2. 定义为虚函数的目的:为了允许用基类的指针来调用子类的这个函数。

    3. 定义纯虚函数是为了实现一个接口,起到一个规范的作用,规范继承这个类的程序员必须实现这个函数。

    具体实现代码

    理解过程在下面代码注释中:

    #include<iostream>
    using namespace std;
    
    //基类People
    class People
    {
    public:
        virtual void a(float x)
        {cout<<"People::a "<<x<<endl;}
    
        void b(float x)
        {cout<<"People::b "<<x<<endl;}
    
        void c(float x)
        {cout<<"People::c "<<x<<endl;}
    };
    
    //派生类Student
    class Student:public People
    {
    public:
        virtual void a(float x)
        {cout<<"Student::a "<<x<<endl;}
    
        void b(int x)
        {cout<<"Student::b "<<x<<endl;}
    
        void c(float x)
        {cout<<"Student::c "<<x<<endl;}
    };
    
    // 只有在通过基类指针或引用间接指向派生类子类型时多态性才会起作用
    int main()
    {
        Student d;
    
        People *people=&d; // p基类指针,p的函数调用如果有virtual
        // 如果没有virtual,是正常的静态函数调用-调用基类的:输出 Peoplexxxx
        // 如果有virtual,根据多态性调用派生类的:调用a函数输出 Student xxx
    
        Student *student=&d;
        // student派生类指针,s的所有函数调用都只是调用自己的函数,和多态性无关,student的所有函数调用的结果都输出Student::是正常的
    
        people->a(1.45f); // Student::a 1.45   atttention!
        student->a(1.45f); // Student::a 1.45
    
        people->b(1.45f); // People::b 1.45
        student->b(1.45f); // Student::b 1
    
        people->c(1.45f); // People::c 1.45   atttention!
        student->c(1.45f); // Student::c 1.45
    
        return 0;
    }
    
  • 相关阅读:
    STM32中管脚利用
    阻抗匹配
    无功功率与补偿
    宏的灵活应用例子
    串口接入检测与串口命令解析
    16 款最流行的JavaScript 框架
    不可错过的10个超棒jQuery表单操作代码片段
    20 个用于处理页面滚动效果的 jQuery 插件
    11 个最佳 jQuery 滚动条插件
    jQuery的搜索关键词自动匹配插件
  • 原文地址:https://www.cnblogs.com/OFSHK/p/14536996.html
Copyright © 2011-2022 走看看