我正在尝试掌握如何使用虚函数。
以下内容正确吗?我也不会在base的.cpp文件中包含虚拟吗?
在定义派生类时,我是否还要在派生类的公共范围内声明虚函数?
//BASE HEADER FILE
#ifndef BASE_H
#define BASE_H
class Base {
public:
virtual double testFunc() = 0;
int func2();
};
#endif
//BASE.CPP FILE
#include "base.h"
int Base::func2()
{
return 5;
}
//DERIVED HEADER FILE
#ifndef DER_H
#define DER_H
#include "base.h"
class Derived : public Base {
public:
double testFunc();
};
#endif
//DER.CPP FILE
#include "Der.h"
double Derived::testFunc()
{
return 3.2;
}
答案 0 :(得分:3)
您无需将virtual
附加到在父类中已声明为virtual的函数。 virtual
说明符指定一个非静态成员函数是虚拟的,并支持动态调度。它只能出现在非静态成员函数的初始声明的decl-specifier-seq
中(即,在类定义中声明时)。
什么是虚拟功能
虚拟函数是在基类中声明的成员函数,并由派生类重新定义(重写)。当使用指针或对基类的引用来引用派生类对象时,可以为该对象调用虚拟函数并执行该派生类的函数版本。
虚拟功能的工作(VTABLE和VPTR的概念)
如果类包含虚函数,则编译器本身会做两件事:
有关虚拟功能的详细信息,已经有很多好的答案 How are virtual functions and vtable implemented?