看板 MacDev 關於我們 聯絡資訊
code @implementation Dog - (NSString*) bark { return @"Woof!"; } - (NSString*) speak { return [self bark]; } @end @implementation Basenji : Dog - (NSString*) bark { return @""; } @end Basenji* b = [Basenji new]; NSString* s = [b speak]; 1.這樣是呼叫Basenji class的bark method ,還是呼叫Dog class的bark method 2.為什麼我編譯後是出現Program ended with exit code: 0 而不是字串? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.171.68.185 ※ 文章網址: https://www.ptt.cc/bbs/MacDev/M.1446557811.A.60C.html
darktt: 理論上是Basenji的bark,不過為什麼會出現錯誤就不明瞭了 11/03 21:49
darktt: 建議描述一下你是怎麼運行它的 11/03 21:49
angelina877: 為什麼是Basenji的bark?? 11/03 21:53
Dog.h #import <Foundation/Foundation.h> @interface Dog : NSObject - (NSString*) bark ; - (NSString*) speak ; @end Dog.m #import "Dog.h" @implementation Dog - (NSString*) bark { return @"Woof!"; } - (NSString*) speak { return [self bark]; } @end Basenji.h #import "Dog.h" @interface Basenji : Dog - (NSString*) bark; @end Basenji.m #import "Basenji.h" @implementation Basenji - (NSString*) bark { return @"123"; // empty string, Basenjis can't bark }; @end main.m #import <Foundation/Foundation.h> #import "Dog.h" #import "Basenji.h" int main(int argc, const char * argv[]) { @autoreleasepool { Basenji* b = [Basenji new]; NSString* s = [b speak]; NSLog(@" %@ .",s);//修改後 } return 0; } ※ 編輯: angelina877 (118.171.68.185), 11/03/2015 22:00:44
darktt: self指的是這個instance,另外你override bark了,那bar 11/03 22:02
darktt: k的method指標會指向Basenji class 11/03 22:02
darktt: [b speak]->[b bark](不管有沒有override) 11/03 22:05
darktt: 沒有就會得到Woof,有就會得到123 11/03 22:06
darktt: 另外,你得不到東西是正常的,因為這個程式在運行完畢時會 11/03 22:08
darktt: 馬上終止,所以看不到任何東西 11/03 22:09
darktt: 想要印出資訊的話請用NSLog 11/03 22:10
[b speak]->[b bark] 這句話看不懂 沒有就會得到Woof,有就會得到123 這句話的意思是 如果我在Basenji class 沒有bark method得到Woof 如果我在Basenji class 有寫bark method得到123 理解對嗎? ※ 編輯: angelina877 (118.171.68.185), 11/03/2015 22:29:51
yr: 但是你沒有把它印出來啊.... 11/03 22:31
※ 編輯: angelina877 (118.171.68.185), 11/03/2015 22:41:38
Obama19: 設斷點用lldb印 你這邊猜要猜到民國幾年 11/04 11:29
tom19830924: 啊不就繼承 先去看看物件導向的繼承在說啥啊 11/04 14:12
powerwolf543: 就override method了啊 11/09 00:18
angelina877: 懂了 謝謝大家 11/11 22:12