2016-05-01 15 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 
}; 

私は、最初の二つの仮想オペレータ宣言によって混乱しています、私は新しいクラスは、基本クラスを継承しているとし、どのように私はこの二つの演算子をオーバーライドしますサブクラスオブジェクトをBaseクラスと見なすと、これらの2つの関数を呼び出すことができます。

答えて

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

感謝を!型キャストのオーバーロードは私には新しいものです。 –

関連する問題