C++ 虚拟函数如何在头、体和派生类中工作?
我试图掌握如何使用虚拟函数 以下是正确的吗?我还会在base的.cpp文件中不包括虚拟机吗 在定义派生类时,我是否还会在派生类的公共部分声明虚函数C++ 虚拟函数如何在头、体和派生类中工作?,c++,virtual,C++,Virtual,我试图掌握如何使用虚拟函数 以下是正确的吗?我还会在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"
//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;
}
您不需要将
virtual
附加到父类中已声明为virtual的函数。virtual
说明符指定非静态成员函数是虚拟的,并支持动态分派。它可能只出现在非静态成员函数初始声明的decl说明符seq
中(即,当它在类定义中声明时)
什么是虚拟功能
虚函数是在基类中声明并由派生类重新定义(重写)的成员函数。使用指针或基类引用引用派生类对象时,可以为该对象调用虚拟函数并执行派生类版本的函数
虚拟功能的工作(VTABLE和VPTR的概念)
如果一个类包含一个虚拟函数,那么编译器本身会做两件事:
您不需要将
virtual
附加到父类中已声明为virtual的函数。virtual
说明符指定非静态成员函数是虚拟的,并支持动态分派。它可能只出现在非静态成员函数初始声明的decl说明符seq
中(即,当它在类定义中声明时)
什么是虚拟功能
虚函数是在基类中声明并由派生类重新定义(重写)的成员函数。使用指针或基类引用引用派生类对象时,可以为该对象调用虚拟函数并执行派生类版本的函数
虚拟功能的工作(VTABLE和VPTR的概念)
如果一个类包含一个虚拟函数,那么编译器本身会做两件事:
您的语法错误,您需要为您的语法定义提供范围functions@Tejendra你说得对!在写这篇文章的时候错过了。我现在就把它修好,让我的问题更清楚一点。谢谢,您确实需要将“Der.h”中的“base.h”包含在内,以使
base
在Derived
@NPE的声明中引用时可见。谢谢大家!@SharkTank1我希望答案能澄清所问的两个问题。您的语法错误,您需要为您的定义提供范围functions@Tejendra你说得对!在写这篇文章的时候错过了。我现在就把它修好,让我的问题更清楚一点。谢谢,您确实需要将“Der.h”中的“base.h”包含在内,以使base
在Derived
@NPE的声明中引用时可见。谢谢大家!@SharkTank1我希望答案能澄清这两个问题。