Navigation

    CFD中文网

    CFD中文网

    • Login
    • Search
    • 最新

    OF中虚函数疑惑

    OpenFOAM
    4
    7
    2771
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • M
      mohui last edited by

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

      1 Reply Last reply Reply Quote
      • 李东岳
        李东岳 管理员 last edited by

        虚函数被声明为virtual

        virtual void function();
        

        纯虚函数要附加=0

        virtual void function() = 0;
        

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

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

        CFD高性能服务器 http://dyfluid.com/servers.html

        1 Reply Last reply Reply Quote
        • K
          kasitefy last edited by

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

          M 1 Reply Last reply Reply Quote
          • M
            mohui @kasitefy last edited by

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

            K 1 Reply Last reply Reply Quote
            • K
              kasitefy @mohui last edited by 李东岳

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

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

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

              M 1 Reply Last reply Reply Quote
              • M
                mohui @kasitefy last edited by

                @kasitefy :big_mouth: 懂了

                1 Reply Last reply Reply Quote
                • 程
                  程迪 last edited by

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

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

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

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

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

                  github: chengdi123000
                  网站:chengdi123000.github.io
                  本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

                  1 Reply Last reply Reply Quote
                  • First post
                    Last post

                  CFD中文网 | 东岳流体 | 京ICP备15017992号-2
                  论坛登录问题反馈可联系 li.dy@dyfluid.com