C++、Objective-C 混合程式設計
阿新 • • 發佈:2019-02-10
在XCODE中想使用C++程式碼,你需要把檔案的副檔名從.m改成.mm,這樣才會啟動g++編譯器。
我們來看個測試程式碼:
這是我寫的C++類,類內部使用了OC的程式碼。根據測試可以確定以下幾點: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_); } };
1. C++函式內可以呼叫OC方法、可以建立OC物件、函式引數可以為OC物件。
2. C++類的成員變數可以是OC物件。
其實,在混編時,OC和C++的物件都是單純的指標,所以可以任意的彼此呼叫對方的方法、使用對方的內部資料。
再來看看OC中是如何使用C++程式碼的:
和之前分析c++類沒啥區別,毅然是可以使用c++的語法 可以使用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
還有一點要注意,OC類無法繼承C++類,C++也一樣。因為oc類的結構和c++類結構不同,所以才導致該問題。