我理解什么是虚函数和纯虚函数,但是,在C ++中使用虚函数有什么用。我可以为这个可以使用虚函数的概念找到更合适的例子吗?
给出的例子是 1.形成一个基类 2.Rectangle和square是派生类
我的问题是,首先需要形状派生类? 为什么我们不能直接直接使用矩形和方形类
答案 0 :(得分:0)
如果要覆盖派生类的某个行为(读取方法)而不是为Base类实现的行为(并且希望在运行时通过指向Base类的指针),则可以使用虚函数。 / p>
示例:
#include <iostream>
using namespace std;
class Base {
public:
virtual void NameOf(); // Virtual function.
void InvokingClass(); // Nonvirtual function.
};
// Implement the two functions.
void Base::NameOf() {
cout << "Base::NameOf\n";
}
void Base::InvokingClass() {
cout << "Invoked by Base\n";
}
class Derived : public Base {
public:
void NameOf(); // Virtual function.
void InvokingClass(); // Nonvirtual function.
};
// Implement the two functions.
void Derived::NameOf() {
cout << "Derived::NameOf\n";
}
void Derived::InvokingClass() {
cout << "Invoked by Derived\n";
}
int main() {
// Declare an object of type Derived.
Derived aDerived;
// Declare two pointers, one of type Derived * and the other
// of type Base *, and initialize them to point to aDerived.
Derived *pDerived = &aDerived;
Base *pBase = &aDerived;
// Call the functions.
pBase->NameOf(); // Call virtual function.
pBase->InvokingClass(); // Call nonvirtual function.
pDerived->NameOf(); // Call virtual function.
pDerived->InvokingClass(); // Call nonvirtual function.
}
输出将是:
Derived::NameOf
Invoked by Base
Derived::NameOf
Invoked by Derived
答案 1 :(得分:0)
您可以使用虚函数来实现运行时多态性。