【c++回顾】虚函数

虚函数的出现是为了实现多态。
多态我感觉 是当一个引用根据它实际指向的对象,执行对应的方法。

因为父类类型的指针,或引用可以指向继承了该父类的子类的对象。
<mark>普通函数的执行是跟着类走的,虚函数的执行是跟着对象走的</mark>
所以呢,通过虚函数来使用类的多态。

父类声明一个虚函数,由子类来实现,当然了,子类可以覆盖或着继续使用父类的虚函数。

那么纯虚函数是啥呢?就是父类完全不去实现这个虚函数,意味着子类要继承这个类就必须实现这个虚函数。这不就是接口类嘛

所以 当一个类中有一个纯虚函数的时候,这个类就不应该有对象了,因为其中的一个函数没有实现,

注意

当父类中定义了虚函数的时候,析构函数最好也定义成虚函数!!!
如果没有定义成虚函数,那么子类的对象的析构有可能析构不完全。
比如说

#include <iostream>

using namespace std;

class A {
   
public:
    virtual void run() {
   
        cout << "A" << endl;
    }
    ~A() {
   
        cout << "~A" << endl;
    }
};

class B : public A {
   
public:
    void run() {
   
        cout << "B" << endl;
    }
    ~B() {
   
        cout << "~B" << endl;
    }
};

int main(){
   
    B b;
    A *a = &b;
    a->run();
    delete a;
    return 0;
}

当然会有警告,如果不写delete a,那么编译器自动会调用b,a 的析构函数。

这里再提一下虚继承,这个是出现在有多重继承的语言中的,
为了实现菱形继承,保证b继承a,c继承a,d继承b,c后
d从b,c继承过来的a是同一片内存空间,毕竟编译器不会因为你b,c都继承a就将b,c内存中的a作为一个a,而是有两片独立的内存空间的。

全部评论

相关推荐

抱抱碍事梨a:三点建议,第一点是建议再做一个项目,把自我介绍部分顶了,第二点是中南大学加黑加粗,第三点是建议加v详细交流
点赞 评论 收藏
分享
04-29 18:07
常州大学 Java
寂静羽翼:兄弟我已经亲身经历了,双非没实习很多大厂还是会给笔试的,可是有的公司笔试做的好也不给面一直卡着,ssob基本看我没实习都拒绝我了,但是每天投满偶尔也能有一两场初创公司的面试,但是薪资基本在五六千
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务