Objective-C:动态绑定


  1 //  Complex.h
  2 //  03-动态绑定
  3 //
  4 //  Created by ma c on 15/8/11.
  5 //  Copyright (c) 2015年. All rights reserved.
  6 //
  7 
  8 #import <Foundation/Foundation.h>
  9 
 10 @interface Complex : NSObject
 11 @property(nonatomic,assign)CGFloat real;//实部
 12 @property(nonatomic,assign)CGFloat imag;//虚部
 13 -(instancetype)initWithReal:(CGFloat)r andImag:(CGFloat)i;
 14 -(Complex *)add:(Complex *)c;
 15 -(void)print;
 16 @end
 17 
 18 //  Complex.m
 19 //  03-动态绑定
 20 //
 21 //  Created by ma c on 15/8/11.
 22 //  Copyright (c) 2015年 bjsxt. All rights reserved.
 23 //
 24 
 25 #import "Complex.h"
 26 
 27 @implementation Complex
 28 -(instancetype)initWithReal:(CGFloat)r andImag:(CGFloat)i
 29 {
 30     self = [super init];
 31     if(self)
 32     {
 33         _real = r;
 34         _imag = i;
 35     }
 36     return self;
 37 }
 38 -(Complex *)add:(Complex *)c
 39 {
 40     CGFloat r = _real+c.real;
 41     CGFloat i = _imag+c.imag;
 42     return [[Complex alloc]initWithReal:r andImag:i];
 43 }
 44 -(void)print
 45 {
 46     NSLog(@"%.2f*%.2fi",_real,_imag);
 47 }
 48 @end
 49 
 50 //  Fraction.h
 51 //  03-动态绑定
 52 //
 53 //  Created by ma c on 15/8/11.
 54 //  Copyright (c) 2015年. All rights reserved.
 55 //
 56 
 57 #import <Foundation/Foundation.h>
 58 
 59 @interface Fraction : NSObject
 60 
 61 @property(nonatomic,assign)NSInteger numerator;//分子
 62 @property(nonatomic,assign)NSInteger denominator;//分母
 63 -(id)initWithNumerator:(NSInteger)n addDenominator:(NSInteger) d;
 64 -(Fraction*) add:(Fraction*) fraction;
 65 -(void)print;
 66 @end
 67 
 68 //  Fraction.m
 69 //  03-动态绑定
 70 //
 71 //  Created by ma c on 15/8/11.
 72 //  Copyright (c) 2015年 bjsxt. All rights reserved.
 73 //
 74 
 75 #import "Fraction.h"
 76 
 77 @implementation Fraction
 78 -(id)initWithNumerator:(NSInteger)n addDenominator:(NSInteger) d
 79 {
 80     self = [super init];
 81     if(self)
 82     {
 83         _numerator = n;
 84         _denominator = d;
 85     }
 86     return self;
 87 }
 88 -(Fraction*) add:(Fraction*) fraction
 89 {
 90    NSInteger n = _numerator*fraction.denominator+fraction.numerator*_denominator;
 91    NSInteger d = _denominator*fraction.denominator;
 92     
 93    return [[Fraction alloc]initWithNumerator:n addDenominator:d];
 94 }
 95 -(void)print
 96 {
 97     NSLog(@"%ld/%ld",_numerator,_denominator);
 98 }
 99 @end
100 
101 
102 //  main.m
103 //  03-动态绑定
104 //
105 //  Created by ma c on 15/8/11.
106 //  Copyright (c) 2015年. All rights reserved.
107 //
108 
109 #import <Foundation/Foundation.h>
110 #import "Fraction.h"
111 #import "Complex.h"
112 int main(int argc, const char * argv[])
113 {
114     @autoreleasepool
115     {
116         //测试分数类
117         Fraction *f1 = [[Fraction alloc]initWithNumerator:1
118                                            addDenominator:2];
119         [f1 print];
120         
121         Fraction *f2 = [[Fraction alloc]initWithNumerator:2
122                                            addDenominator:3];
123         [f2 print];
124         
125         Fraction *f3 = [f1 add:f2];
126         [f3 print];
127         
128         //测试复数类
129         Complex *c1 = [[Complex alloc]initWithReal:5.0 andImag:3.0];
130         [c1 print];
131         
132         Complex *c2 = [[Complex alloc]initWithReal:4.3 andImag:2.5];
133         [c2 print];
134         
135         Complex *c3 = [c1 add: c2];
136         [c3 print];
137         
138         
139         //测试动态绑定
140         id pObj = nil;
141         pObj = f3;
142         [f3 print];
143         
144         pObj = c3;
145         [c3 print];
146         
147         id arr[3] = {c1,f1,@""};
148         for(int i=0;i<3;i++)
149         {
150             //运行时检查
151             /*if([arr[i] isKindOfClass:[Fraction class]]==YES || [arr[i] isKindOfClass:[Complex class]]==YES)
152             */
153             if([arr[i] respondsToSelector:@selector(print)]==YES)
154             {
155               [arr[i] print];
156               //SEL sel = @selector(print);
157               //[arr[i] performSelector:@selector(print)];
158             }
159             
160             
161         }
162     }
163     return 0;
164 }

 

 

 

posted @ 2015-08-11 16:20  XYQ全哥  阅读(289)  评论(0编辑  收藏  举报