objc的重载以及void指针?

  
@interface MyClass : NSObject{}
- (void)show;
@end
@implementation MyClass
- (void)show {
NSLog(@"MyClass");
}
@end

@interface MySubClass : MyClass
{}
@end
@implementation MySubClass
- (void)show {
NSLog(@"MySubClass");
}
@end

一个临时函数:
- (void)show:(void *)temp {
MyClass *mc = (MyClass *)temp;
[mc show];
}

在主函数中调用:

MySubClass *msc = [[MySubClass alloc] init];
void *temp = (void *)msc;
[self show:temp];

控制台的结果://MySubClass

不是很明白这段代码的意思?

评论 (0)链接2012-12-18 

void即“无类型”,void *则为“无类型指针”,可以指向任何数据类型。可以相当于id类型。
子类对父类方法的重写是不可逆的,即只要重写了方法父类的方法就会被“忘掉”。在Main中使用MySubClass创建了实例temp,在临时函数show中将这个temp强制转换成了MyClass类型,但是之前由MySubClass重写的show方法已经是子类的重写后的方法,而不是父类的方法,所以最后输出的是MySubClass。不知道我讲的清不清楚,可能有讲的不对的,可以百度继承和重载。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-12-25
德问是一个专业的编程问答社区,请 登录注册 后再提交答案