2014-12-30 132 views
-2

一個例子是來自斯坦福的cs193p分配3的一個目的可以稱爲:如何在子類中重寫一個超類方法使重寫的方法,以通過型超類

-(int)match:(NSArray *)otherCards 
{ 
int score = 0; 

if ([otherCards count] == 1) 
{ 
    playingCard *otherCard = [otherCards firstObject]; 
    if ([self.suit isEqualToString: otherCard.suit]) 
    { 
     score = 1; 
     NSLog(@"%d",score); 
    }else if (self.rank == otherCard.rank) 
    { 
     score = 4; 
    } 
} 

return score; 
} 

以上是實施CardCard的一個子類中的方法稱爲PlayingCard。

- (int)match:(NSArray *)otherCards 
{ 
int score = 0; 

for (Card *cards in otherCards) 
    if ([cards.contents isEqualToString:self.contents]) 
     score = 1; 

return score; 
} 

以上是卡片匹配的實現。

-(void)chooseCardAtIndex:(NSUInteger)index 
{ 
Card *card = [self cardAtIndex:index]; 

if (!card.isMatched) 
{ 
    if (card.isChosen) 
    { 
     card.chosen = NO; 
    } 
    else 
    { 
     for (Card *otherCard in self.cards) 
     { 
      if (otherCard.isChosen && !otherCard.isMatched) 
      { 
       int matchScore = [card match:@[otherCard]]; 
       if (matchScore) 
       { 
        self.score += matchScore * MATCH_BONUS; 
        card.matched = YES; 
        otherCard.matched = YES; 
       } 
       else 
       { 
        otherCard.chosen = NO; 
        self.score -= MISMATCH_PENALTY; 
       } 
       break; 
      } 
     } 
     self.score -= COST_TO_CHOOSE; 
     card.chosen = YES; 
    } 
} 
} 

正如你可以在上面看到,該方法的比賽是由卡的一個實例調用,而不是遊戲牌,然而結果如下執行從遊戲牌

+1

https://en.wikipedia.org/wiki/Polymorphism_(computer_science) –

+0

沒有調用的上下文,看到超類和子類的實現並沒有給出任何跡象表明爲什麼你會得到意想不到的結果。儘管有這種意圖,但很有可能你在該範圍內有一張紙牌,而不是一張卡。 – adamdc78

+0

@ adamdc78我已經包含了調用的上下文。 – Google

回答

0

我想你需要一個虛基類,在超卡

-(int)match:(NSArray *)otherCards 
{ 
    // do nothing 
} 

並且您需要兩個子類,如PlayingCard,NormalCard.YOU應該在每個子類中實現該函數。

相關問題