OF中虚函数疑惑



  • 一个简单的问题,就是在of中写一个类库的话,如何判断成员函数是否定义为虚函数?也看了c++中关于虚函数作用的介绍,但是结合到OF中还是有点疑惑,就是不太确定什么情况下,成员函数需要定义成虚函数,望大神们不吝赐教。:laughing:



  • 虚函数被声明为virtual

    virtual void function();
    

    纯虚函数要附加=0

    virtual void function() = 0;
    

    虚函数和纯虚函数是多态的构成。虚函数在基类中需要定义,纯虚函数在基类中不需要定义。
    参考这个头文件C文件
    头文件中出现了virtual使得类变成了基类,出现了=0;使得类变成了虚基类。

    如果不熟悉,我建议使用面向过程编程后,再整合到类。否则你需要彻底学习C++,建议C++ primer plus看5遍 :joking:



  • 判断函数是否是虚函数就看它有没有关键字virtual。
    个人认为,虚函数作用就是可以使用基类的指针访问子类的这个函数,所以你觉得需要统一接口的时候可以考虑使用虚函数。



  • @kasitefy 你的意思是否是说,如果我写的基类只给某一个类使用的话,那就没必要声明成虚函数对吗?



  • @mohui 可以这么认为。我给你举个例子,比如说现在要写一个插值的类。先定义一个基类base,里面包含一个用于计算f(x)的值的纯需函数fun。然后定义其他插值方法,比如拉格朗日,牛顿,样条等,让他们继承base类,然后在内部实现不同方法对应的fun函数。
    然后使用的话,可以这么用:

    base* it=new newton();
    it->fun(x);
    

    因此纯虚函数使得不同的类有了相同的接口,并且不写实现就会报错,规范了代码。如果需要定义某个类所特有的方法,那就不需要虚函数。如果需要继承该基类的子类中的某几个需要具有类似的功能,比如说都需要一个初始化的函数,那么可以把这个函数抽出来另外定义一个基类,然后多重继承。不过一般不太推荐同时继承很多基类。



  • @kasitefy :big_mouth: 懂了



  • 你要清楚你想实现的语义是什么,再去找具体的语言机制。

    虚函数的语义是多态,也就是你有一个基类的指针引用可以自动调用到实际子类的函数。

    纯虚函数的语义是一个接口。

    有纯虚函数的类是虚基类起的是定义调用接口的作用,同时虚基类不能实例化,对编程也是一种限制性保护。

    p.s.简单一点儿,都整成虚的也可以。调用开销通常没那么大。


登录后回复
 

与 CFD中文网 的连接断开,我们正在尝试重连,请耐心等待