OC多態,動態類型綁定

來源:互聯網
上載者:User

標籤:

////  main.m//  OC7類////  Created by Zoujie on 15/8/23.//  Copyright (c) 2015年 Zoujie. All rights reserved.//#import <Foundation/Foundation.h>#import "Fraction.h"//匯入標頭檔#import "Complex.h"#define Choose  0int main(int argc, const char * argv[]) {    @autoreleasepool {        // insert code here...        NSLog(@"Hello, World!");                Fraction *myFraction = [Fraction new];        if (Choose)        {//          [myFraction setNumberator1:11];            myFraction.denominator1 = 11;//          [myFraction setDenominator1:3];        myFraction.numberator1 = 3;        }        else        {            [myFraction setNumberator1:1 Denominator:7];        }        NSLog(@"The value of myFraction");        [myFraction print];        NSLog(@"The value of myFranction:%i/%i",myFraction.numberator1,myFraction.denominator1);                //   add        傳入對象參數        Fraction *afraction = [Fraction new];        Fraction *bfraction = [Fraction new];                [afraction setNumberator1:1 Denominator:4];        [bfraction setNumberator1:1 Denominator:2];                [afraction print];        NSLog(@"+");        [bfraction print];        NSLog(@"=");//        //        [afraction add:bfraction];//        [afraction print];//        ////        reduce 分數相約到最簡形式//        [afraction reduce];//        [afraction print];//        //        在方法中分配和返回對象        Fraction *resultFraction;        resultFraction = [afraction newAdd:bfraction];        [resultFraction print];                Fraction *subRusult = [bfraction subtract:afraction];        [subRusult print];                //        多態  不同類使用相同方法        Fraction *f1 = [Fraction new];        Fraction *f2 = [Fraction new];        Fraction *fracResult;                Complex *c1 = [Complex new];        Complex *c2 = [Complex new];        Complex *complexResult;        //        [f1 setTo:1 over:10];        [f1 setNumberator1:1 Denominator:10];        [f2 setNumberator1:2 Denominator:15];                [c1 setReal:18.0 andImaginary:2.5];        [c2 setReal:-5.0 andImaginary:3.2];                [c1 print]; NSLog(@" +");[c2 print];        NSLog(@"------------");        complexResult = [c1 add:c2];//        [complexResult reduce];        [complexResult print];        NSLog(@"\n");        //        將兩個分數相加的顯示        [f1 print];NSLog(@"  +");[f2 print];        NSLog(@"----");        fracResult = [f1 newAdd:f2];        [fracResult print];                //        id 可以用來儲存屬於任何類的對象        id dataValue;        NSLog(@"---------------id類型");        dataValue = f1;        [dataValue print];                dataValue = c1;        [dataValue print];        ////        self.dataValue; //id變數無法使用點運算子//        處理動態類型的方法               if ([dataValue isKindOfClass:[Complex class]])//對象是不是Complex或其子類的成員,繼承層次關係        {            NSLog(@"dataValue ‘s SuperClass is %@",[dataValue class]);        };                if ([dataValue isMemberOfClass:[Complex class]]){};//對象是不是Complex的成員,直接成員關係        if ([f1 respondsToSelector:@selector(setReal:andImaginary:)]){};//對象是否能夠響應selector所指定的方法        if ([dataValue instancesRespondToSelector:@selector(setReal:andImaginary:)]){};//指定的類執行個體是否能響應selector        if ([dataValue isSubclassOfClass:[Complex class]]){};//對象是否是指定類的子類                [dataValue performSelector:@selector(setValue:forKey:)];//應用selector指定的方法        [dataValue performSelector:@selector(setNumberator1:Denominator:) withObject:f1];//使用selector指定的方法,傳遞參數        [dataValue performSelector:@selector(setNumberator1:Denominator:) withObject:f1 withObject:f2];                //使用@try處理異常        Fraction *f = [Fraction new];//        [f noSuchMethod];        NSLog(@"Execution continues");        @try {//            [f setReal:18.0 andImaginary:2.5];        }        @catch (NSException *exception) {            NSLog(@"Caught %@%@",[exception name],[exception reason]);        }        @finally {           NSLog(@"Execution continues");        }            }    return 0;}
////  Fraction.h//  OC7類////  Created by Zoujie on 15/8/23.//  Copyright (c) 2015年 Zoujie. All rights reserved.//#import <Foundation/Foundation.h>//介面檔案@interface Fraction : NSObject#pragma mark - 屬性 自動產生 Setter && Get@property  int numberator1;@property  int denominator1;#pragma mark - Setter && Get//-(void)setNumerator:(int)n;//-(void)setDenominator:(int)d;//-(int)numerator;//-(int)denominator;-(double) convertToNum;-(void)print;/** *  多參數函數 */-(void)setNumberator1:(int) n Denominator:(int)d;/** *  add */-(void) add:(Fraction *)f;/** *  相約數 */-(void) reduce;/** *  記數 */-(int)showpage;/** *  new add */-(Fraction *) newAdd:(Fraction *)f;/** *  減去訊息接受著的參數 */-(Fraction *) subtract :(Fraction *)f;/** *  乘 */-(Fraction *) multiply :(Fraction *) f;/** *  除 */-(Fraction *) divide :(Fraction *)f;@end
////  Fraction.m//  OC7類////  Created by Zoujie on 15/8/23.//  Copyright (c) 2015年 Zoujie. All rights reserved.//#import "Fraction.h"//雙引號實用於本地檔案(自己建立的檔案),而不是系統檔案//實現檔案  實現部分包含的私人資訊/** *  static 關鍵字 局部靜態變數 記錄所有對象調用函數的次數    局部變數 只記錄每個對象自己調用函數的次數 */static int hitCount = 0;//調用次數@implementation Fraction//{//    int numberator;//    int denominator;//}/** *  如果省略@synthesize指令,那麼編譯器會自動分別命名底層的執行個體變數_numberator1,_denominator1. */@synthesize numberator1,denominator1;//-(void) setNumerator:(int)n//{//    numberator = n;//}////-(void) setDenominator:(int)d//{//    denominator = d;//}//********setter getter的參數名 不要跟 執行個體名稱 相同 *********-(void)setNumberator:(int)numberator{    numberator1 = numberator;}-(void) setDenominator:(int)denominator{    denominator1 = denominator;}//-(void) setDenominator:(int)denominator //自動產生Setter//{//    denominator = denominator;//}-(int)numerator{    return numberator1;}-(int)denominator{    return denominator1;}-(void)print{        NSLog(@"%i/%i",numberator1,denominator1);}-(double)convertToNum{    if (denominator1 != 0)    {        return (double) numberator1 / denominator1;    }    else    {        return NAN;    }}-(void)setNumberator1:(int)n Denominator:(int)d{    denominator1 = d;    numberator1 = n;}-(void) add:(Fraction *)f{    numberator1 = numberator1 * f.denominator1 +denominator1 *f.numberator1;    denominator1 = denominator1 * f.denominator1;    //    self 關鍵字   當前方法的接受著    [self reduce];}/* *  new add */-(Fraction *) newAdd:(Fraction *)f{    Fraction *result = [Fraction new];        result.numberator1 = numberator1 * f.denominator1 + denominator1 * f.numberator1;    result.denominator1 = denominator1 * f.denominator1;        [result reduce];        return result;}/** *  sub */-(Fraction *) subtract:(Fraction *)f{    Fraction *result = [Fraction new];        result.numberator1 = numberator1 * f.denominator1 - denominator1 * f.numberator1;    result.denominator1 = denominator1 * f.denominator1;        [result reduce];        return result;}-(void) reduce{//局部變數    int u = numberator1;    int v = denominator1;    int temp;        while (v != 0) {        temp = u % v;        u = v ;        v = temp ;    }    numberator1 /= u;    denominator1 /= u;}-(int)showpage{    int hitCount = 0;    hitCount ++;    return hitCount;}@end
////  Complex.h//  OC7類////  Created by Zoujie on 15/8/30.//  Copyright (c) 2015年 Zoujie. All rights reserved.///** *  多態,動態類型,動態綁定   *  使不同的類共用相同的方法名稱的能力稱為多態 */#import <Foundation/Foundation.h>@interface Complex : NSObject@property double real,imaginary;-(void)print;-(void)setReal:(double)a andImaginary:(double)b;-(Complex *) add:(Complex *)f;@end
////  Complex.m//  OC7類////  Created by Zoujie on 15/8/30.//  Copyright (c) 2015年 Zoujie. All rights reserved.//#import "Complex.h"@implementation Complex@synthesize real,imaginary;-(void)print{    NSLog(@"%g + %gi",real,imaginary);}-(void) setReal:(double)a andImaginary:(double)b{    real = a ;    imaginary = b;}-(Complex *)add:(Complex *)f{    Complex *result = [[Complex alloc]init];    result.real = f.real+real;    result.imaginary = f.imaginary + imaginary;    return result;    }@end


OC多態,動態類型綁定

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.