在XCODE中想使用C++代碼,你需要把文件的擴展名從.m改成.mm,這樣纔會啓動g++編譯器。
我們來看個測試代碼:
class TestC {
private:
NSString *str_;//C++類可以使用OC對象作爲成員變量
public:
TestC() {
str_ = @"hi mc0066.";//構造函數內可以使用OC對象來賦值
}
TestC(NSString *str) {//函數可以接收OC對象(通過函數參數)
str_ = str;
}
TestC(NSInteger num) {
str_ = [NSString stringWithFormat:@"%d",num];//C++函數可以調用OC方法
}
void show() {
printf("%s\n",[str_ UTF8String]);
NSLog(@"str_ is:%@\n",str_);
}
};
這是我寫的C++類,類內部使用了OC的代碼。根據測試可以確定以下幾點:
1. C++函數內可以調用OC方法、可以創建OC對象、函數參數可以爲OC對象。
2. C++類的成員變量可以是OC對象。
其實,在混編時,OC和C++的對象都是單純的指針,所以可以任意的彼此調用對方的方法、使用對方的內部數據。
再來看看OC中是如何使用C++代碼的:
@interface TestOC : NSObject
{
TestC *c;//可以使用C++對象作爲參數
}
- (id)initTestOC;
- (void)testC;
@end
@implementation TestOC
- (id)initTestOC{
if ((self = [super init])) {
c = new TestC();//以C++語法調用構造函數
}
return self;
}
- (void)testC{
c->show();//調用C++類的內部函數
}
- (void)dealloc{
delete c;//用完 記得刪除C++對象,避免內存泄露
[super dealloc];
}
@end
和之前分析c++類沒啥區別,毅然是可以使用c++的語法 可以使用c++的方法和成員。
還有一點要注意,OC類無法繼承C++類,C++也一樣。因爲oc類的結構和c++類結構不同,所以才導致該問題。