zoukankan      html  css  js  c++  java
  • 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 }
    
    
    
     
  • 相关阅读:
    软件定义网络实验4:Open vSwitch 实验——Mininet 中使用 OVS 命令(实验过程及结果记录)
    软件定义网络实验3:测量路径的损耗率 (实验过程及结果记录)
    第一次个人编程作业
    软件定义网络实验2:Mininet拓扑的命令脚本生成(实验过程及结果记录)
    软件定义网络实验1:Mininet源码安装和可视化拓扑工具(实验过程及结果记录)
    第一次博客作业
    第07组(69) 需求分析报告
    第七组(69)团队展示
    第三次作业
    结对编程作业
  • 原文地址:https://www.cnblogs.com/XYQ-208910/p/4721362.html
Copyright © 2011-2022 走看看