在C ++中使用虚拟类和抽象类有什么用处

时间:2014-02-26 10:06:58

标签: c++ virtual-functions

我理解什么是虚函数和纯虚函数,但是,在C ++中使用虚函数有什么用。我可以为这个可以使用虚函数的概念找到更合适的例子吗?

给出的例子是 1.形成一个基类 2.Rectangle和square是派生类

我的问题是,首先需要形状派生类? 为什么我们不能直接直接使用矩形和方形类

2 个答案:

答案 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)

您可以使用虚函数来实现运行时多态性。