2016-05-01 62 views
1

基本結構是這樣定義在頭文件:如何在C++中重載這個虛擬操作符?

struct Base { 
    virtual operator char * (void) { 
     return 0; 
    } 
    virtual operator long (void) {  // hash function 
     return 0; 
    } 
    virtual long operator == (Base & base) {// isequal function 
     return *this == base; 
    } 
    Base (void) {}    // new_element 
    virtual ~Base (void) {}   // delete_element 
    virtual ostream & Write (ostream & stream) = 0;// write_element 
}; 

我由前兩個虛擬運營商聲明混淆,假設我有一個新的類繼承的基類,我怎麼重寫這兩個運營者當子類對象被視爲基類時,這兩個函數可以被調用?

回答

4

就像你重寫的任何其他功能一樣。

#include <iostream> 
#include <vector> 
using namespace std; 

struct A 
{ 
    virtual operator char * (void) 
    { 
     return 0; 
    } 
}; 

struct B : A 
{ 
    operator char * (void) override 
    { 
     return (char*)12; 
    } 
}; 

struct C : A 
{ 
    operator char * (void) override 
    { 
     return (char*)24; 
    } 
}; 

int main() 
{ 
    vector<A*> v; 
    v.push_back(new A); 
    v.push_back(new B); 
    v.push_back(new C); 

    for (auto e : v) 
    { 
     char* p = *e; 
     cout << "p=" << (int)p << endl; 
    } 

    for (auto e : v) 
    { 
     delete e; 
    } 

    return 0; 
} 

這將打印:

p=0 
p=12 
p=24 
+0

謝謝! typecast超載對我來說是新的。 –