OF中虚函数疑惑
-
一个简单的问题,就是在of中写一个类库的话,如何判断成员函数是否定义为虚函数?也看了c++中关于虚函数作用的介绍,但是结合到OF中还是有点疑惑,就是不太确定什么情况下,成员函数需要定义成虚函数,望大神们不吝赐教。:laughing:
-
判断函数是否是虚函数就看它有没有关键字virtual。
个人认为,虚函数作用就是可以使用基类的指针访问子类的这个函数,所以你觉得需要统一接口的时候可以考虑使用虚函数。 -
@mohui 可以这么认为。我给你举个例子,比如说现在要写一个插值的类。先定义一个基类base,里面包含一个用于计算f(x)的值的纯需函数fun。然后定义其他插值方法,比如拉格朗日,牛顿,样条等,让他们继承base类,然后在内部实现不同方法对应的fun函数。
然后使用的话,可以这么用:base* it=new newton(); it->fun(x);
因此纯虚函数使得不同的类有了相同的接口,并且不写实现就会报错,规范了代码。如果需要定义某个类所特有的方法,那就不需要虚函数。如果需要继承该基类的子类中的某几个需要具有类似的功能,比如说都需要一个初始化的函数,那么可以把这个函数抽出来另外定义一个基类,然后多重继承。不过一般不太推荐同时继承很多基类。
-
你要清楚你想实现的语义是什么,再去找具体的语言机制。
虚函数的语义是多态,也就是你有一个基类的指针引用可以自动调用到实际子类的函数。
纯虚函数的语义是一个接口。
有纯虚函数的类是虚基类起的是定义调用接口的作用,同时虚基类不能实例化,对编程也是一种限制性保护。
p.s.简单一点儿,都整成虚的也可以。调用开销通常没那么大。
2017年8月12日 02:35
1/7
2017年8月14日 06:28