美文网首页
虚函数与纯虚函数

虚函数与纯虚函数

作者: devilisdevil | 来源:发表于2021-02-24 01:36 被阅读0次

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

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

虚函数

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

纯虚函数

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

class A {
  public:
    virtual void print() = 0;
}

void A::print() {
  cout << 123 << endl;
}

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

析构函数(虚/纯虚?)

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

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

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

相关文章

  • 纯虚函数和抽象类

    纯虚函数和抽象类 概念 纯虚函数:没有函数体的虚函数。 抽象类:包含纯虚函数的类就称为抽象类。 纯虚函数就是在函数...

  • 4.0 C++远征:纯虚函数与抽象类

    3-1纯虚函数抽象类 [TOC] 一、纯虚函数 1.纯虚函数的定义 ​ 纯虚函数,没有函数体,同时定义时在函数...

  • 08. 纯虚函数、抽象类、多继承、菱形继承、虚

    一.虚函数 二.纯虚函数 三,虚析构函数 四.纯虚函数 五,多继承 六.多继承-虚函数 七.菱形继承 八. 虚继承...

  • 虚函数与纯虚函数

    虚函数:被virtual关键字修饰的成员函数,就是虚函数。虚函数的作用,用专业术语来解释就是实现多态性(Polym...

  • 虚函数与纯虚函数

    C++的类要实现多态,不像java,直接就有,而是需要给函数前面带上virtual,所以java的成员函数从c++...

  • 2018-01-28 高级多态(一)

    纯虚函数 纯虚函数是必须在派生类中重写的虚函数。通过将虚函数初始化为0来将其声明为纯虚的。派生类重写所有虚函数,否...

  • 虚函数与纯虚函数的区别

    1.虚函数与纯虚函数 在他们的子类中都可以被重写.它们的区别是: (1)纯虚函数只有定义,没有实现;而虚函数既有定...

  • 虚函数、纯虚函数

    1.虚函数(impure virtual) C++的虚函数主要作用是“运行时多态”,父类中提供虚函数的实现,为子类...

  • 抽象基类与纯虚函数

    因为呢,含有纯虚函数的类才叫做基类。所以我们先看看纯虚函数。 纯虚函数 1.什么是纯虚函数?首先呢,要清楚一点的就...

  • 虚函数 纯虚函数 虚类

    虚函数 类的某些函数,基类希望它的派生类各自定义这些函数各自的版本。除了构造函数,任何函数都可以是虚函数。让派生类...

网友评论

      本文标题:虚函数与纯虚函数

      本文链接:https://www.haomeiwen.com/subject/rzrjfltx.html