Objective-C:动态绑定
// 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:动态绑定的更多相关文章
- Automake
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...
- OC 动态类型,动态绑定,动态加载
OC 动态类型,动态绑定,动态加载 Objective-C具有相当多的动态特性,基本的,也是经常被提到和用到的有 动态类型(Dynamic typing) 动态绑定(Dynamic binding) ...
- 刨根问底Objective-C Runtime
http://chun.tips/blog/2014/11/05/bao-gen-wen-di-objective%5Bnil%5Dc-runtime-(2)%5Bnil%5D-object-and- ...
- Objective-C与C++的区别
1.两者的最大相同:都是从C演化而来的面相对象语言,两者都兼容标准C语言 2.两者的最大不同:Objective-C提供了运行期动态绑定机制,而C++是编译静态绑定,并且通过嵌入类(多重继承)和虚函数 ...
- Objective C Runtime 开发介绍
简介 Objective c 语言尽可能的把决定从编译推迟到链接到运行时.只要可能,它就会动态的处理事情.这就意味着它不仅仅需要一个编译器,也需要一个运行时系统来执行变异好的代码.运行时系统就好像是O ...
- iOS完全自学手册——[三]Objective-C语言速成,利用Objective-C创建自己的对象
1.前言 上一篇已经介绍了App Delegate.View Controller的基本概念,除此之外,分别利用storyboard和纯代码创建了第一个Xcode的工程,并对不同方式搭建项目进行了比较 ...
- 第一章 熟悉Objective -C 编写高质量iOS与OS X代码的52 个有效方法
第一章 熟悉Objective -C 编写高质量iOS与OS X代码的52 个有效方法 第一条: 了解Objective-C 语言的起源 关键区别在于 :使用消息结构的语言,其运行时所应执行 ...
- .Net mvc 根据前台参数动态绑定对象
业务需求:根据前台界面的参数,动态绑定对象 <param name="colNames">属性名拼接字符串</param><param name=&q ...
- Objective C中的ARC的修饰符的使用---- 学习笔记九
#import <Foundation/Foundation.h> @interface Test : NSObject /** * 默认的就是__strong,这里只是做示范,实际使用时 ...
- Objective的字符串拼接 似乎没有Swift方便,但也可以制做一些较为方便的写法
NSString *str1 = @"字符串1"; NSString *str2 = @"字符串2"; //在同样条件下,Objective的字符串拼接 往往只 ...
随机推荐
- CSU - 2059 Water Problem
Description 一条'Z'形线可以将平面分为两个区域,那么由N条Z形线所定义的区域的最大个数是多少呢?每条Z形线由两条平行的无限半直线和一条直线段组成 Input 首先输入一个数字T(T& ...
- 第1天:Django框架简介与工程创建
Django简介 Django特点 环境搭建 创建工程 启动服务 使用pycharm打开工程 创建子应用 Django简介 Django,是用Python语言写的开源web开发框架,并遵循MVC设计. ...
- Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列之flanneld网络介绍及部署(三)
0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 k8s架构目录:Kubernetes(k8s)集群部署(k8s企业级Docker容器集群管理)系列目录 一.flanneld介绍 ...
- JavaScript DOM大纲
DOM 定义了访问和操作HTML文档的标准方法 访问(查找标签) ---- 直接查找 document.getElementById(“idname”) document.getElementsByT ...
- Kubernetes网络模型概念
Kubernetes网络模型 Kubernetes网络模型设计的一个基础原则是:每个Pod都拥有一个独立的IP地址,而且假定所有Pod都在一个可以直接连通的.扁平的网络空间中.所以不管它们是否运行在同 ...
- bzoj 3262
题意:给你一些三维上的点,对于每个点,统计三个坐标都小于等于该点的点数. 如果点的范围在300以内,可以用三维树状数组搞,但这题坐标范围太大. 考虑将所有点按照x坐标排序,从左到右,相当于在一个二维平 ...
- ASP.NET 构建高性能网站 第5篇
利用分析工具分析加载页面信息 站点的优化说到底还是站点每一个页面的优化,即使得站点的页面更快的呈现在用户的眼前.所以在此之前,我们首先来看看一个web页面的组成部分: 1. Html文件:在ASP.N ...
- js面向对象写页面
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 不同的activity使用bundle对象传值给广播接收器
解决了一下午的问题,广播机制传值,在一个activity中发送广播给广播接收器,使用的是同一个action 在另一个activity中如果也发送广播给同一个广播接收器,使用相同的action,会导致后 ...
- 云计算大会有感—MapReduce和UDF
(转载请注明出处:http://blog.csdn.net/buptgshengod) 1.參会有感 首先还是非常感谢CSDN能给我票,让我有机会參加这次中国云计算峰会.感觉不写点什么对不 ...