Skip to content
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
CFD中文网

CFD中文网

  1. CFD中文网
  2. OpenFOAM
  3. OF中虚函数疑惑

OF中虚函数疑惑

已定时 已固定 已锁定 已移动 OpenFOAM
7 帖子 4 发布者 6.8k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • M 离线
    M 离线
    mohui
    写于 最后由 编辑
    #1

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

    1 条回复 最后回复
  • 李东岳李 在线
    李东岳李 在线
    李东岳 管理员
    写于 最后由 编辑
    #2

    虚函数被声明为virtual

    virtual void function();
    

    纯虚函数要附加=0

    virtual void function() = 0;
    

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

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

    http://dyfluid.com/index.html
    需要帮助debug算例的看这个 https://cfd-china.com/topic/8018

    1 条回复 最后回复
  • K 离线
    K 离线
    kasitefy
    写于 最后由 编辑
    #3

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

    M 1 条回复 最后回复
  • M 离线
    M 离线
    mohui
    在 中回复了 kasitefy 最后由 编辑
    #4

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

    K 1 条回复 最后回复
  • K 离线
    K 离线
    kasitefy
    在 中回复了 mohui 最后由 李东岳 编辑
    #5

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

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

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

    M 1 条回复 最后回复
  • M 离线
    M 离线
    mohui
    在 中回复了 kasitefy 最后由 编辑
    #6

    @kasitefy :big_mouth: 懂了

    1 条回复 最后回复
  • 程 离线
    程 离线
    程迪
    写于 最后由 编辑
    #7

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

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

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

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

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

    已婚,勿扰。
    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

    1 条回复 最后回复

  • 登录

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 最新
  • 版块
  • 东岳流体
  • 随机看[请狂点我]