C++、Objective-C 混合編程

在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++類結構不同,所以才導致該問題。



發佈了41 篇原創文章 · 獲贊 1 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章