gpt4 book ai didi

c++ - 从 Objective-C 子对象调用 C++ 对象的方法

转载 作者:太空狗 更新时间:2023-10-29 22:53:32 26 4
gpt4 key购买 nike

我有一些 Objective-C++ 代码,我试图从 Objective-C 对象中获取事件以调用 C++ 对象中的方法。我是 Objective-C 的新手,所以我可能做错了。

例子:

@interface KnobClass {
}
-(void)Event;
@end

class DoorClass {
public:
KnobClass * knob;
void start() { knob = [[KnobClass allocate] init]; }
};

class AlarmClass {
public:
void Alert();
};

class HouseClass {
public:
DoorClass door;
AlarmClass alarm;
};

int main() {
//...
HouseClass house;
house.door.start();
//...
return 0;
}

方法 [house.door.knob Event] 是在事件上生成的,我希望它能够调用 house.alarm.Alert()。但我很困惑如何以正确的方式完成这项工作。有人可以建议实现此目的的方法吗?

最佳答案

我也在学习 Objective-C。这适用于 gcc 4.3.3:

#import <Foundation/Foundation.h>

class AlarmClass {
public:
void Alert() {
printf("Alert!\n");
}
};

@interface KnobClass: NSObject {
AlarmClass *alarm;
}
-(void)Event;
-(id)initWithAlarm:(AlarmClass*) alarm;
@end

@implementation KnobClass: NSObject

-(id)initWithAlarm:(AlarmClass*) a
{
self = [super init];
alarm = a;
return self;
}

-(void)Event
{
alarm->Alert();
}
@end

class DoorClass {
public:
KnobClass * knob;
void start(AlarmClass *a) {
knob = [[KnobClass alloc] initWithAlarm: a];
}

void doEvent() {
[knob Event];
}
};

class HouseClass {
public:
DoorClass door;
AlarmClass alarm;
};

int main(int argc, const char *argv[]) {
//...
HouseClass house;
house.door.start(&house.alarm);
house.door.doEvent();
//...
return 0;
}

关于c++ - 从 Objective-C 子对象调用 C++ 对象的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2217776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com