OC對象:封裝、繼承、多態的使用舉例一,oc多態

來源:互聯網
上載者:User

OC對象:封裝、繼承、多態的使用舉例一,oc多態

// 該代碼在網上找的視頻中的例子,感覺很適合類和對象分不清楚的同學參考,僅供學習分享,謝謝

// 建立一個Pointtest類,用屬性x、y表示點的座標位置,求兩點之間的距離,使用兩種方法:類方法和對象方法

#import <Foundation/Foundation.h>

#import <math.h> // 要使用到開方和求平方根兩個函數,pow和sqrt,所以對該標頭檔進行聲明

// 聲明類的屬性和方法

@interface Pointtest : NSObject

{

    double _x; // 設定x座標
    double _y; // 設定y座標

}

// 設定x的setter和getter方法,基礎較好的同學應該知道這是啥東西吧

- (void)setX:(double)x;

- (double)x;

// 設定y的setter和getter方法,基礎較好的同學應該知道這是啥東西吧

- (void)setY:(double)y;

- (double)y;

// 設定同時擷取x、y值,為什麼還要設定一次呢?因為封裝的思想:隱藏對象的屬性和實現細節

- (void)setX:(double)x andY:(double)y;

// 寫一個對象方法,來計算該點對象與其他點對象的距離

- (double)distanceWithOther:(Pointtest *)other;

//寫一個類方法,來計算2個點對象之間的距離

+ (double)distanceBetweenPoint1:(Pointtest *)p1 andPoint2:(Pointtest *)p2;

@end

// 實現

@implementation Pointtest

// 設定x的setter和getter方法,基礎較好的同學應該知道這是啥東西吧

- (void)setX:(double)x

{

// 可以在這裡添加判斷語句或是其他演算法來達到封裝效果

    _x = x;

}

- (double)x

{

    return _x;

}

// 設定y的setter和getter方法,基礎較好的同學應該知道這是啥東西吧

- (void)setY:(double)y

{

// 可以在這裡添加判斷語句或是其他演算法來達到封裝效果

    _y = y;

}

- (double)y

{

    return _y;

}


// 設定同時擷取x、y值,為什麼還要設定一次呢?因為封裝的思想:隱藏對象的屬性和實現細節

- (void)setX:(double)x andY:(double)y

{

// 直接使用建立對象本身的方法來調用設定,這樣就不用管裡面的方法是怎樣實現的了,封裝的目的就達到了

    [self setX:x];
    [self setY:y];

}

// 寫一個對象方法,來計算該點對象與其他點對象的距離

- (double)distanceWithOther:(Pointtest *)other

{

// 兩點間距離的計算公式:((x1-x2)平方 + (y1-y2)平方)平方根

    double x1 = [self x];

    double x2 = [other x];

    double y1 = [self y];

    double y2 = [other y];

    double powX = x1-x2;

    double powY = y1-y2;

    double powSum = pow(powX,2)+pow(powY,2);

    return sqrt(powSum); // 這裡寫太細了   o.0

}

//寫一個類方法,來計算2個點對象之間的距離

+ (double)distanceBetweenPoint1:(Pointtest *)p1 andPoint2:(Pointtest *)p2

{

// 這裡理解很重要,這裡是用對象方法實現的

    return [p1 distanceWithOther:p2];

}

@end

// 主函數

int main()

{

// 建立一個點(13,10)

    Pointtest *d1 = [Pointtest new];

    [d1 setX:13 andY:10]; // 不用單個的去設了

// 建立一個點(10,14)

    Pointtest *d2 = [Pointtest new];

    [d2 setX:10 andY:14];

// 調用對象方法

    double distance1 = [d1 distanceWithOther:d2];
    
//調用類方法

    double distance2 = [Pointtest distanceBetweenPoint1:d1 andPoint2:d2];

    NSLog(@"對象方法算出的結果%f,類方法算出的結果%f",distance1,distance2);

    return 0;

}



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.