2014-02-26 86 views
-1

我明白什麼是虛函數和純虛函數,但是C++中虛函數的用途是什麼。我可以爲這個可以使用虛函數的概念獲得更好的例子嗎?C++中虛擬類和抽象類的用法

此給出的例子是 1.Shape一個基類 2.Rectangle和方是派生類

我的問題是什麼是需要的形狀排在首位派生類? 爲什麼不能直接直接使用矩形和方形類

+0

這可能有助於http://stackoverflow.com/questions/2391679/can-someone-explain-c-virtual-methods?rq=1 –

+1

請不要濫用標準術語。 「實時」在IT中具有非常具體的含義,那不是。你的意思是「真實世界」。您需要查看「多態性」,這是OOP的支柱之一。 – EJP

+0

從網絡解析一組不同的應用程序消息? –

回答

0

可以使用虛擬函數來實現運行時多態性。

+0

我們可以使用純虛函數來製作接口。 –

0

如果您想要爲您的派生類重寫某個特定行爲(讀取方法)而不是爲基類實現的特定行爲(讀取方法),並且想要這樣做,則可以使用虛擬函數在運行時通過指向基類的指針。

實施例:

#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