虚函数的作用:通过以下两个程序来进行解释!
可以让成员函数操作一般化,用基类的指针指向不同的派生类的对象时, 基类指针调用其虚成员函数,则会调用其真正指向对象的成员函数, 而不是基类中定义的成员函数(只要派生类改写了该成员函数)。 若不是虚函数,则不管基类指针指向的哪个派生类对象,调用时都会调用基类中定义的那个函数。
程序1(非虚函数):
base.h
#ifndef BASE_H
#define BASE_H
#include <iostream>
using namespace std;
class Base
{
public:
/*virtual*/ void TestFunc(){
cout << "base" << endl;
}
};
#endif // BASE_H
derived.h
#ifndef DERIVED_H
#define DERIVED_H
#include "base.h"
#include <iostream>
using namespace std;
class Derived : public Base
{
public:
void TestFunc(){
cout << "son" << endl;
}
};
#endif // DERIVED_H
main.c
#include <iostream>
#include "derived.h"
using namespace std;
int main()
{
Derived d;
Base &rd = d;
rd.TestFunc();
return 0;
}
输出结果:
base
解析:
基类指针指向子类对象函数,子类重写基类非虚函数,则调用基类对象的成员函数函数
程序2(虚函数):
base.h
#ifndef BASE_H
#define BASE_H
#include <iostream>
using namespace std;
class Base
{
public:
virtual void TestFunc(){
cout << "base" << endl;
}
};
#endif // BASE_H
其他与程序1一致
输出结果:
son
解析:
基类指针指向子类对象函数,子类重写基类虚函数,则调用子类对象的成员函数函数
简述:
在基类使用了virtual不会调用基类,会调用派生类的重写函数。
有错欢迎指出,共同进步。
转载自:https://blog.csdn.net/huabiaochen/article/details/100576503
有所修改