zoukankan      html  css  js  c++  java
  • C++中如何实现像Java中接口功能--C++抽象类(纯虚函数,虚函数)

    在Java中定义个接口,之后可以定义不同的类来实现接口,如果有个函数的参数为这个接口的话,就可以对各自的类做出不同的响应。

    如:

    interface animal
    {
        public void info();
    }
    
    class dog implements animal
    {
        public void info()
        {
            System.out.println("dog class");
        }
    }
    
    class cat implements animal
    {
        public void info()
        {
            System.out.println("cat class");
        }
    }
    
    class func{
        public void act(animal a)
        {
            a.info();
        }
    }
    public class test{
        public static void main(String []args)
        {
            dog d = new dog();
            cat c = new cat();
    
            func f = new func();
            f.act(d);
            f.act(c);
    
        }
    }

     而在C++中,没有接口的定义,我们可以定义抽象类来实现像Java中的接口功能。

    包含纯虚函数的类就是抽象类不能实例化,纯虚函数可以定义为:(本文不考虑函数参数)

    virtual type functionname()=0;

    如:

    #include <iostream>
    using namespace std;
    class animal
    {
    public:
        virtual void info()=0;
    };
    class dog:public animal
    {
        void info()
        {
            cout << "dog class" << endl;
        }
    };
    class cat:public animal
    {
        void info()
        {
            cout << "cat class" << endl;
        }
    };
    void test(animal &a)
    {
        a.info();
    }
    
    int main()
    {
        dog d;
        cat c;
    
        test(d);
        test(c);
    
        return 0;
    }

    上述程序实现结果与Java中一样。

    接口和抽象类都不能实例化,但是在C++中如果在类中只是声明为虚函数,还是可以进行实例化的,不严格地说,也是可以当做接口来用。

    虚函数定义为:

    virtual type functionname(){/*函数体定义*/}

    #include <iostream>
    using namespace std;
    
    class animal{
    public:
        virtual void info(){
            cout<<"animal class."<<endl;
        }
    };
    
    class dog:public animal{
    public:
        void info(){
            cout<<"dog class."<<endl;
        }
    };
    
    class cat:public animal{
    public:
        void info(){
            cout<<"cat class."<<endl;
        }
    };
    
    void test(animal& a)
    {
        a.info();
    }
    
    
    int main()
    {
        animal a;
        dog d;
        cat c;
    
        test(a);
        test(d);
        test(c);
    
        return 0;
    }

    在C++中定义虚函数是在函数前加个virtual关键字,上面例子的结果为:

    如果在基类(animal)函数中没有加virtual关键字的话,就会输出:

     ps:看了很多东西,试着写点博客,欢迎批评指正,多给点建议。

  • 相关阅读:
    Jmeter中的变量(三)
    Jmeter组件和属性(二)
    Jmeter配置元件执行顺序
    Fiddler Web Session 列表(1)
    selenium webdriver操作各浏览器
    java1.8环境配置+win10系统
    python函数库及函数标准库
    MySql 数据库基础命令
    Linux 常用命令
    normalize.css
  • 原文地址:https://www.cnblogs.com/mjk961/p/6442882.html
Copyright © 2011-2022 走看看