Ignore:
Timestamp:
Oct 17, 2007, 3:31:20 AM (17 years ago)
Author:
dai_9181
Message:

インターフェイスメソッドはオーバーライド対象外とした

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler_Common/src/Method.cpp

    r347 r351  
    44
    55
     6bool DynamicMethod::Override( const UserProc *pUserProc, Prototype::Accessibility accessibility, bool isOverrideModifier )
     7{
     8    if( this->IsVirtual()
     9        && !this->IsAbstract()
     10        && isOverrideModifier == false )
     11    {
     12        // Override修飾子が無い状況で基底クラスの実体メソッドをオーバーライドしようとした
     13        SetError(127,NULL,cp);
     14    }
     15
     16    //メンバ関数を上書き
     17    this->SetUserProcPtr( pUserProc );
     18    this->SetAbstractMark( false );
     19
     20    if( !this->IsVirtual() )
     21    {
     22        // オーバーライドミス
     23        SetError(136,NULL,cp);
     24    }
     25    if(this->GetAccessibility() != accessibility )
     26    {
     27        SetError(128,NULL,cp);
     28    }
     29
     30    return true;
     31}
     32
     33
     34StaticMethod::StaticMethod( const StaticMethod &staticMethod )
     35{
     36    // 静的メソッドがコピーコンストラトされることは想定しない
     37    SetError();
     38}
     39
    640Methods::Methods()
    741{
    842}
     43
     44// コピーコンストラクタ
     45Methods::Methods( const Methods &methods )
     46{
     47    BOOST_FOREACH( CMethod *pMethod, methods )
     48    {
     49        this->push_back( new DynamicMethod( dynamic_cast<DynamicMethod &>(*pMethod) ) );
     50    }
     51}
     52
    953Methods::~Methods()
    1054{
    1155    Methods &methods = *this;
    12     BOOST_FOREACH( CMethod *pMethod, methods ){
     56    BOOST_FOREACH( CMethod *pMethod, methods )
     57    {
    1358        delete pMethod;
    1459    }
     
    2671}
    2772
    28 bool Methods::Override( UserProc *pUserProc, Prototype::Accessibility accessibility )
     73CMethod *Methods::FindForOverride( const UserProc *pUserProc )
    2974{
    3075    //メソッドのオーバーライド
     
    3277    BOOST_FOREACH( CMethod *pMethod, methods )
    3378    {
    34         if( pMethod->GetUserProc().GetName() == pUserProc->GetName() )
     79        if( pMethod->GetUserProc().IsEqualForOverride( pUserProc ) )
    3580        {
    36             if( pMethod->GetUserProc().Params().Equals( pUserProc->Params() )
    37                 && pMethod->GetUserProc().ReturnType().Equals( pUserProc->ReturnType() ) )
    38             {
    39                 //メンバ関数を上書き
    40                 pMethod->SetUserProcPtr( pUserProc );
    41                 pMethod->Override();
    42 
    43                 if( !pMethod->IsVirtual() )
    44                 {
    45                     // オーバーライドミス
    46                     SetError(136,NULL,cp);
    47                 }
    48                 if(pMethod->GetAccessibility() != accessibility )
    49                 {
    50                     SetError(128,NULL,cp);
    51                 }
    52 
    53                 pUserProc->SetMethod( pMethod );
    54                 return true;
    55             }
     81            return pMethod;
    5682        }
    5783    }
    58     return false;
     84    return NULL;
    5985}
    6086
Note: See TracChangeset for help on using the changeset viewer.