从构造函数或析构函数调用虚拟函数很危险,应尽可能避免,因为我们调用的虚拟函数是从基类调用的,而不是从派生类调用的。原因是,在 C++ 中,超类在派生类之前构造。因此,在以下示例中,由于必须实例化 B,然后才能实例化 D。当调用 B 的构造函数时,它还不是 D,因此虚拟函数表仍然包含 B 的 s() 的条目。示例代码 实时演示#include using namespace std; class B { public: B() { s(); } ... 阅读更多
C++ 中的纯虚析构函数是可能的。如果一个类包含纯虚析构函数,则必须为纯虚析构函数提供函数体。示例代码 实时演示#include using namespace std; class B { public: virtual ~B()=0; // 纯虚析构函数 }; B::~B() { std::cout
C++ 中的虚拟函数用于创建基类指针列表,并在不知道派生类对象类型的情况下调用任何派生类的类方法。虚拟函数在运行时延迟解析。虚拟函数的主要用途是实现运行时多态性。内联函数用于提高代码效率。内联函数的代码在编译时在内联函数调用的位置被替换,无论何时调用内联函数。每当使用基类引用或指针调用虚拟函数时,它都不能内联,... 阅读更多