C++中的virtual关键字---补充(1)《Effective C++》

2 篇文章 0 订阅

C++中的virtual关键字,很好的解决了C++中类的多态性,很好地实现了动态绑定,那么实现动态绑定的条件是什么呢?
1)指定为虚函数;
2)通过基类指针或者引用调用。
了解了这两个特点,下面让我们带着virtual的这两个特性来如下代码中进行探索:

1、基类A中的show函数不是virtual函数;

#include <iostream>
#include <cstring>
#include <string>
using namespace std;
class A{
public:
    A(int ii, int jj){
        i = ii;
        j = jj;
    }
    void show(){
        cout <<"我是A中的show():"<< i << " " <<j<< endl;
    }
private:
    int i, j;
};
class B :public A{
public:
    B();
    B(int i, int j, int z) :A(i, j), z(z){
    }
    void show(){
        cout << "我是B中的show():";
        A::show();
        cout << z << endl;
    }
private:
    int z;
};
int main(){
    B* b1 = new B(1, 2, 3);
    b1->show();
    A* b = new B(1, 2, 3);
    b->show();
    return 0;
}

运行结果为:
这里写图片描述

2、基类中的show函数被声明为virtual函数

#include <iostream>
#include <cstring>
#include <string>
using namespace std;
class A{
public:
    A(int ii, int jj){
        i = ii;
        j = jj;
    }
    virtual void show(){
        cout << i << " " <<j<< endl;
    }
    ~A(){

    }
private:
    int i, j;
};
class B :public A{
public:
    B();
    B(int i, int j, int z) :A(i, j), z(z){
    }
    void show(){
        A::show();
        cout << z << endl;
    }
private:
    int z;
};
int main(){
    B* b1 = new B(1, 2, 3);
    b1->show();
    A* b = new B(1, 2, 3);
    b->show();
    return 0;
}

运行结果为:
这里写图片描述

观察两份代码的运行结果,我们可以发现第一份代码中并没有实现动态绑定,即多态,第二份代码中由于将基类中的show函数声明为virtual,可以实现动态绑定即多态度,因此virtual关键字对于类的多态有着直观至关重要的作用,理解了这篇的virtual关键字的作用,那么下篇博客中我们将探索virtual关键字的特殊用法及其特性,敬请期待!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值