重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
inline, static, constructor ,template 函数都不能 为虚函数,而析构函数可以。
10年积累的网站制作、网站设计经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站设计后付款的网站建设流程,更有越城免费网站建设让你可以放心的选择与我们合作。
为什么呢:
inline: 编译器替换; 而虚函数是为了解决运行期间绑定。
static:class 成员; 编译期间就给class了。
constructor: 构造函数表示要生成一个class的object;假设是virtual的,那就说不知道这个实例化derived还是based的class。但是类型实例化必须在编译期确定(否则编译器不知道到底是什么对象了)
template:模板实例是在 compile-time,virtual就意味着在run-time确定。这让编译器设计者为难了,这就是说虚函数表要指向各种版本的 template function 实例,代码设计者confuse,编译器设计者也觉得蛮烦。
虚函数的作用是可以通过基类的指针或者引用调到派生类的这个函数。
你上面的代码是演示虚函数的作用,不用去简便他。
你可以把这个程序中的virtual全部删除掉,然后再运行程序,观察一下两次结果的不一样,估计你就能理解虚函数的作用了。
c语言里不管什么函数都不可以声明成虚函数的,只有c++里才可以