美文网首页
JNI基础 -- C++基础知识(继承多态,虚函数 )

JNI基础 -- C++基础知识(继承多态,虚函数 )

作者: 刘小厨 | 来源:发表于2020-04-19 18:08 被阅读0次

    继承

    在Java中类的继承只能是单继承,但是在C++中可以多继承
    继承是通过一个冒号表示的,如下:

    //允许多继承
    class Parent
    {
    
    };
    
    class GrandParent
    {
    
    };
    
    //允许多继承 ,可用private或public声明继承的权限,默认private 
    class Child : private Parent , public GrandParent {
    
    };
    
    

    C++中的继承还可以声明继承的作用域,有private和public,默认是private

    • private表示 子类只能访问父类私有的方法和变量
    • public表示 父类的方法和变量子类都可以访问

    如果在Child和Parent类中都实现一个签名相同的test()方法,然后创建一个Child对象,调用child.test()的方法,代码执行的是Child类的test()方法,这一点和Java一致
    C++中没有super.test()这种调用父类方法的方式,如果想调用父类方法可以通过:
    Parent::test()的方式调用

    代码:

    class Parent
    {
    
    public:
        virtual void test(){
            cout << "Parent" << endl;
        }
    };
    
    
    class Child : public Parent{
    public:
        void test() {
            cout << "Child" << endl;
        }
    };
    

    多态-静态多态

    如果我们这样调用:

     Parent* child = new Child();
        child->test();
    

    控制台输出结果为:

    Parent
    

    如果是Java使用类似的代码,我们输出的结果肯定是Child,因为C++的编译的机制和Java是不一样的,这种多态的使用在C++中是一种静态多态,在编译的过程中,实例化的是一个Parent

    多态-动态多态

    如果上述代码执行我们想调用Child的test()方法,就需要使用动态多态,这里需要借助C++中的虚函数,将.h头文件中Parent的test()方法用关键字virtual修饰如下:

    virtual void test(){
            cout << "Parent" << endl;
        }
    

    使用虚函数需要注意的点:

    • 构造方法永远不要设为虚函数
    • 析构方法一般声明为虚函数

    我们可以通过虚函数在父类中声明一个纯虚函数,使用virtual关键字声明一个函数,不做实现,子类必须实现,类似于Java中的抽象方法,比如:

    //等于0表示该方法没有实现
    virtual void test1() = 0;
    

    相关文章

      网友评论

          本文标题:JNI基础 -- C++基础知识(继承多态,虚函数 )

          本文链接:https://www.haomeiwen.com/subject/plopbhtx.html