zoukankan      html  css  js  c++  java
  • 回头复习一下之前学过的东西吧

    距离上次用C++写代码已经有大半年了,有些东西淡忘了许多,或者与JAVA进行了混淆。这次理清几个概念吧 。虚函数,纯虚函数,抽象类。

    先看虚函数,虚函数是用来干什么的呢 举个例子

    getsum()声明为普通成员函数:

    #include<iostream>
    using namespace std;
    class F
    {
    public:
         int getsum()
         {
             return 0;
         }
    };
    class C:public F
    {
    private:
        int a,b;
    public:
        C(int c,int d):a(c),b(d){}
        int getsum()
        {
            return (a+b);
        }
        
    };
    int main()
    {
        F* f=new C(1,2);
        cout<<f->getsum()<<endl;
        return 0;
    }

    输出结果是 :0

    getsum()声明为虚函数:

    #include<iostream>
    using namespace std;
    class F
    {
    public:
         virtual int getsum()
         {
             return 0;
         }
    };
    class C:public F
    {
    private:
        int a,b;
    public:
        C(int c,int d):a(c),b(d){}
        virtual int getsum()
        {
            return (a+b);
        }
        
    };
    int main()
    {
        F* f=new C(1,2);
        cout<<f->getsum()<<endl;
        return 0;
    }

    输出结果为3。

    虚函数和普通成员函数的区别很显然,虚函数是为了实现基类指针能够根据实际对象的类型来调用相应方法(具体实现是由虚函数表)而不是根据指针类型。

    那么,将getsum()声明为纯虚函数:

    #include<iostream>
    using namespace std;
    class F
    {
    public:
         virtual int getsum()=0;
    };
    class C:public F
    {
    private:
        int a,b;
    public:
        C(int c,int d):a(c),b(d){}
        virtual int getsum()
        {
            return (a+b);
        }
        
    };
    int main()
    {
        F* f=new C(1,2);
        cout<<f->getsum()<<endl;
        return 0;
    }

    输出结果也为3.

    实际上,如果一个类的成员函数至少一个是纯虚函数那么这个类就为抽象类(相当于JAVA里的接口),所有继承这个类的子类必须要显式的实现这个这个方法(纯虚函数),否则这个子类依旧为抽象类。抽象类不能被实例化。

    总结一下:

    只要一个类的成员函数有纯虚函数,那么这个类就不能被实例化,所有继承这个类的子类必须实现这个纯虚函数,否则依旧不能被实例化,而虚函数则无此要求。虚函数和纯虚函数都是为了实现多态。

  • 相关阅读:
    2012619 win7环境Jooma建站手记解决问题
    linux学习(4)ubuntu开机自动挂载nfs服务器上的home分区
    linux学习(3)nginx tomcat集群
    oracle to_date 函数
    inux学习(2)vim设置
    linux学习(1)常用命令入门
    tomcat域名绑定
    tomcat内存溢出问题解决思路
    TreeView控件无限级 一次性加载和异步加载剖析
    数据查询支持中文拼音首字母模糊检索
  • 原文地址:https://www.cnblogs.com/mryrs/p/6803858.html
Copyright © 2011-2022 走看看