java中的虚函数和纯虚函数_虚函数与纯虚函数

C++的类要实现多态,不像java,直接就有,而是需要给函数前面带上virtual,所以java的成员函数从c++角度来说的话都是虚函数。

再基类指针或引用指向派生类的时候,调用虚函数,就会在运行时判断并采用真实对象的函数实现,而不是基类的。

虚函数

如上面所说的,加上virtual即可,因为不是纯虚函数,所以也同样需要提供函数的定义

纯虚函数

除了同样必须要有virtual关键字外,函数的定义不是必须的,纯虚函数就是在声明时加上=0即可,如过想要带上定义,那只能把定义放到外面。如

class A {

public:

virtual void print() = 0;

}

void A::print() {

cout << 123 << endl;

}

含有纯虚函数的类是属于抽象类,是不能用他们直接创建对象的,如果要在派生类中调用基类的方法,则采用A::print()的形式。

析构函数(虚/纯虚?)

在继承的情况下,对于一个派生类对象的实例,他的正常销毁是需要从派生类的析构函数开始,一直向上调用各级父类的析构函数。

如果类中包含虚函数,那么析构函数最好也声明为虚函数,因为如果不然,在delete一个基类的指针时,就会无法调用到派生类的析构函数,就可能出现问题。

而如果析构函数是虚函数,我们也一般不会把它定义为纯虚函数,因为和其它函数不同,编译器要求析构函数必须要有定义(而纯虚函数可以没有函数定义/函数体),这样销毁对象时才能有东西调用。如果非要定义为纯虚函数,那么需要给它提供函数定义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值