//  Complex.h
// 03-动态绑定
//
// Created by ma c on 15/8/11.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h> @interface Complex : NSObject
@property(nonatomic,assign)CGFloat real;//实部
@property(nonatomic,assign)CGFloat imag;//虚部
-(instancetype)initWithReal:(CGFloat)r andImag:(CGFloat)i;
-(Complex *)add:(Complex *)c;
-(void)print;
@end // Complex.m
// 03-动态绑定
//
// Created by ma c on 15/8/11.
// Copyright (c) 2015年 bjsxt. All rights reserved.
// #import "Complex.h" @implementation Complex
-(instancetype)initWithReal:(CGFloat)r andImag:(CGFloat)i
{
self = [super init];
if(self)
{
_real = r;
_imag = i;
}
return self;
}
-(Complex *)add:(Complex *)c
{
CGFloat r = _real+c.real;
CGFloat i = _imag+c.imag;
return [[Complex alloc]initWithReal:r andImag:i];
}
-(void)print
{
NSLog(@"%.2f*%.2fi",_real,_imag);
}
@end // Fraction.h
// 03-动态绑定
//
// Created by ma c on 15/8/11.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h> @interface Fraction : NSObject @property(nonatomic,assign)NSInteger numerator;//分子
@property(nonatomic,assign)NSInteger denominator;//分母
-(id)initWithNumerator:(NSInteger)n addDenominator:(NSInteger) d;
-(Fraction*) add:(Fraction*) fraction;
-(void)print;
@end // Fraction.m
// 03-动态绑定
//
// Created by ma c on 15/8/11.
// Copyright (c) 2015年 bjsxt. All rights reserved.
// #import "Fraction.h" @implementation Fraction
-(id)initWithNumerator:(NSInteger)n addDenominator:(NSInteger) d
{
self = [super init];
if(self)
{
_numerator = n;
_denominator = d;
}
return self;
}
-(Fraction*) add:(Fraction*) fraction
{
NSInteger n = _numerator*fraction.denominator+fraction.numerator*_denominator;
NSInteger d = _denominator*fraction.denominator; return [[Fraction alloc]initWithNumerator:n addDenominator:d];
}
-(void)print
{
NSLog(@"%ld/%ld",_numerator,_denominator);
}
@end // main.m
// 03-动态绑定
//
// Created by ma c on 15/8/11.
// Copyright (c) 2015年. All rights reserved.
// #import <Foundation/Foundation.h>
#import "Fraction.h"
#import "Complex.h"
int main(int argc, const char * argv[])
{
@autoreleasepool
{
//测试分数类
Fraction *f1 = [[Fraction alloc]initWithNumerator:
addDenominator:];
[f1 print]; Fraction *f2 = [[Fraction alloc]initWithNumerator:
addDenominator:];
[f2 print]; Fraction *f3 = [f1 add:f2];
[f3 print]; //测试复数类
Complex *c1 = [[Complex alloc]initWithReal:5.0 andImag:3.0];
[c1 print]; Complex *c2 = [[Complex alloc]initWithReal:4.3 andImag:2.5];
[c2 print]; Complex *c3 = [c1 add: c2];
[c3 print]; //测试动态绑定
id pObj = nil;
pObj = f3;
[f3 print]; pObj = c3;
[c3 print]; id arr[] = {c1,f1,@""};
for(int i=;i<;i++)
{
//运行时检查
/*if([arr[i] isKindOfClass:[Fraction class]]==YES || [arr[i] isKindOfClass:[Complex class]]==YES)
*/
if([arr[i] respondsToSelector:@selector(print)]==YES)
{
[arr[i] print];
//SEL sel = @selector(print);
//[arr[i] performSelector:@selector(print)];
} }
}
return ;
}

 

Objective-C:动态绑定的更多相关文章

  1. Automake

    Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...

  2. OC 动态类型,动态绑定,动态加载

    OC 动态类型,动态绑定,动态加载 Objective-C具有相当多的动态特性,基本的,也是经常被提到和用到的有 动态类型(Dynamic typing) 动态绑定(Dynamic binding) ...

  3. 刨根问底Objective-C Runtime

    http://chun.tips/blog/2014/11/05/bao-gen-wen-di-objective%5Bnil%5Dc-runtime-(2)%5Bnil%5D-object-and- ...

  4. Objective-C与C++的区别

    1.两者的最大相同:都是从C演化而来的面相对象语言,两者都兼容标准C语言 2.两者的最大不同:Objective-C提供了运行期动态绑定机制,而C++是编译静态绑定,并且通过嵌入类(多重继承)和虚函数 ...

  5. Objective C Runtime 开发介绍

    简介 Objective c 语言尽可能的把决定从编译推迟到链接到运行时.只要可能,它就会动态的处理事情.这就意味着它不仅仅需要一个编译器,也需要一个运行时系统来执行变异好的代码.运行时系统就好像是O ...

  6. iOS完全自学手册——[三]Objective-C语言速成,利用Objective-C创建自己的对象

    1.前言 上一篇已经介绍了App Delegate.View Controller的基本概念,除此之外,分别利用storyboard和纯代码创建了第一个Xcode的工程,并对不同方式搭建项目进行了比较 ...

  7. 第一章 熟悉Objective -C 编写高质量iOS与OS X代码的52 个有效方法

    第一章 熟悉Objective -C   编写高质量iOS与OS  X代码的52 个有效方法   第一条: 了解Objective-C 语言的起源 关键区别在于 :使用消息结构的语言,其运行时所应执行 ...

  8. .Net mvc 根据前台参数动态绑定对象

    业务需求:根据前台界面的参数,动态绑定对象 <param name="colNames">属性名拼接字符串</param><param name=&q ...

  9. Objective C中的ARC的修饰符的使用---- 学习笔记九

    #import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...

  10. Objective的字符串拼接 似乎没有Swift方便,但也可以制做一些较为方便的写法

    NSString *str1 = @"字符串1"; NSString *str2 = @"字符串2"; //在同样条件下,Objective的字符串拼接 往往只 ...

随机推荐

  1. MVC设计模式一

    一:基础知识 1.mvc model view control 2.模型 是应用程序的主体部分,模型表示业务数据与业务逻辑. 一个模型可以为多个视图提供数据 提高了代码的可重用性 3.视图 用户看到的 ...

  2. 006 ajax验证用户名

    1.大纲 2.index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8&qu ...

  3. 最短路算法 -- SPFA模板

    一.算法步骤 建立一个队列,初始时队列里只有起始点,再建立一个数组记录起始点到所有点的最短路径(该数组的初始值要赋为极大值,该点到它本身的路径赋为0,下面的模板中该数组为dist[]).然后执行松弛操 ...

  4. CentOS7的一些指令

    hostnamectl --static set-hostname yuanxu#永久修改主机名 systemctl stop firewalld.service #停止firewall system ...

  5. Java拾遗补缺

    JDK9的lib目录下已经不再包含dt.jar和tool.jar.

  6. rabbit:Mnesia could not connect to any nodes

    环境: rabbitmq集群   2台机器,挂了一台后重启服务,发现在服务启动不了错误如下: 这里rabbit连接不商rabbit02这里这个服务也无法启动 解决办法: rabbitmq默认的数据库位 ...

  7. new Date 兼容性问题

    IOS 11.1.2 iphoneX 下面解析 // 下面的代码会报错 var d = new Date('2018-09-20 19:20:32'); alert(d.getTime());   必 ...

  8. 火狐FoxyProxy配置教程

    原文:http://www.lvtao.net/tool/640.html 虽然autoproxy是火狐上最优秀的代理插件,但是好久不更新,也有一些bug,比如观看youtube视频7分钟左右会无法播 ...

  9. Trie树之C-实现

    title: Trie树之C++实现 comments: true date: 2016-10-02 16:59:54 categories: 算法 tags: Trie树 前言 之前写了一篇偏向于理 ...

  10. Linux下动态库和静态库的生成和使用

    1.准备头文件和源文件 hello.h #ifndef HELLO_H #define HELLO_H void hello(const char *name): #endif hello.c #in ...