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关键字的特殊用法及其特性,敬请期待!!!