多态(Polymorphism)是面向对象程序设计最重要的特性之一。C++ 通过结合虚函数和指针(引用)来实现多态。作为 C++ 用户,你当然知道如何将虚函数和指针(引用)结合起来以实现多态。但在这些概念之间,可能还存在些许模糊地细节问题。
虚函数的定义
根据 C++ 标准,虚成员函数应在类内定义声明,且必须有定义(实现)。注意,在类外定义实现虚成员函数时,不能再加 virtual 关键字。
struct Foo {
virtual void foo() { // declare and define at the same time, inside the class definition.
std::cout
std::cout
// fun(); // undefined behavior
Abstract::fun(); // OK: non-virtual call
}
};
// definition of the pure virtual function
void Abstract::fun() {
std::cout
Abstract::fun(); // OK: calls pure virtual function
}
~Concrete() {
fun(); // OK: calls Concrete::fun()
}
};
|