objective-c 程式不懂

今天上課教了objective-c 的程式

新開了一個class

不太懂老師說的這些程式是什麼意思

請問有沒有高手 可以在每一行幫我註解上該行程式是什麼意思

主程式

main.m

#import <Foundation/Foundation.h>

#import "Rectangle.h"

int main (int argc, const char * argv[])

{

@autoreleasepool

{

Rectangle *p = [Rectangle new];

[p setwidth:10];

[p setheight:20];

NSLog(@"witch=%f",[p width]);

NSLog(@"height=%f",[p height]);

}

}

-------------------------

Rectangle.h

#import <Foundation/Foundation.h>

@interface Rectangle : NSObject

{

double width;

double height;

}

-(double) width;

-(double) height;

-(void)setWidth :(double)w;

-(void)setHeight :(double)h;

@end

-------------------------

Rectangle.m

#import "Rectangle.h"

@implementation Rectangle

-(double) width

{

return width;

}

-(double) height

{

return height;

}

-(void)setWidth :(double)w

{

width=w;

}

-(void)setHeight :(double)h

{

height=h;

}

@end

因為沒有寫程式的基礎,家裡也沒有MAC可以練習

另外的問題是

主程式main.m 跟Rectangle.h 和 Rectangle.m 這三者的關係是什麼

為什麼要分別寫在不同的地方 他們有何關聯

問題可能很籠統 麻煩各位高手 可否解決小弟的疑惑

1 個解答

評分
  • sponge
    Lv 6
    5 年前
    最佳解答

    您 code 整個外觀為

    Rectangle.h 定義類別 Rectangle 的成員

    Rectangle.m 實作它的 method

    main.m 示範如何調用 Rectangle 類別

    @interface Rectangle : NSObject

    表示開始定義 Rectangle 類別,它繼承 NSObject

    NSObject 是 root class 意即類別若不繼承其他類別就要繼承 NSObject

    目的是讓類別生成的物件有 Objective-C 內物件該有的行為能力

    double width;

    double height;

    宣告 Rectangle 中二個 double 型態的成員變數

    -(double) width;

    宣告 Rectangle 有個 method 叫 width, 無參數,傳回 double 型態結果

    之後 height 意思相同

    -(void)setWidth :(double)w;

    method 叫 setWidth, 一個 double 型態參數 w, 無回傳結果 (void)

    之後 setHeight 意思相同

    @end 與 @interface 為一對,宣告的結束

    Rectangle.m 中用 #import "Rectangle.h" 載入 Rectangle.h 的宣告

    @implementation Rectangle 表示開始實作 Rectangle 類別的 method

    -(double) width

    {

    return width;

    }

    表示 width 這 method 僅傳回 Rectangle 物件中的 width 成員變數

    height 的實作意思也類似

    -(void)setWidth :(double)w

    {

    width=w;

    }

    setWidth 被實作成將參數 w 賦值給成員變數 width

    之後 setHeight 意思也類似

    這邊 @end 就跟 @implementation 配對,實作結束

    int main (int argc, const char * argv[]) 為主函式

    argv 為 command-line 的參數,argc 是參數數量

    @autoreleasepool 表示這區域內創見的物件會自動 release

    不需要手動加入如 [p release] 敘述

    Rectangle *p = [Rectangle new];

    表示創建新的 Rectangle 物件

    [p setwidth:10];

    呼叫 p 的 setWidth method, 參數 w 填入 10

    之後 setHeight 意思類似

    NSLog(@"witch=%f",[p width]);

    在螢幕印出 width=xxx, xxx 是一個 64 為元的浮點數 (double)

    這邊將 p 的 width method 傳回的值當作 xxx 印出

    根據之前實作其實就是 p 的成員變數 width, 剛在 setWidth 被設為 10

    之後一樣印出 height

    如上解釋希望對您有幫助!

還有問題?馬上發問,尋求解答。