iphone开发之C++和Objective-C混编 如何在xcode中用C++的STL

简介:

已经将完整的工程上传到csdn的资源中了,手动贴出链接。

 

如有其它的交流,欢迎相互交流。

 

看下本blog后续贴出的转载的那篇翻译的官方文档,跑一下我给的这个例子,混编应该没什么大碍了吧,自吹一下,哈哈哈。

 

iphone开发里面xcode使用stl其实也不是有那么困难的,我例子只是基本的使用方式说明,高级的还要自己努力。

废话不多,代码放出。

不知道怎么上传附件,放到资源里面自己去下吧。

//单独的一个c++类,和普通的写法没什么两样

新建一个工程OCplusplus,将头文件和m文件改成如下内容,记得要改名成mm文件

 

#import 

 

@interface OCplusplusAppDelegate : NSObject {

    UIWindow *window;

}

 

@property (nonatomicretainIBOutlet UIWindow *window;

NSString* test();

@end

 

#import "OCplusplusAppDelegate.h"

#import "cplusplus.h"

#import "hellocpp.h"

#import "useSTL.h"

//这个文件就是要用到c++的东西,就要改后缀名

@implementation OCplusplusAppDelegate

 

@synthesize window;

 

//试试,自己用自己知道。

 

- (void)applicationDidFinishLaunching:(UIApplication *)application {   

 

    // Override point for customization after application launch

    [window makeKeyAndVisible];

 

cplusplus *cpp = new cplusplus();

NSLog(@"%d",cpp->testadd(46));

delete cpp;

 

hello *h = new hello();

NSLog(@"%d",h->testadd(1122));

h->sayhello();

NSLog(@"%@",h->OCsayello());

NSLog(@"%@",test());

delete h;

 

useSTL *us = new useSTL();

us->testSTL();

delete us;//干什么都要干净利落,不要拉下东西,记得释放内存

}

 

NSString* test()

{ //这就是oc类的c++写法

NSLog(@"jhdglajdklfja");

return @"ttttttttt";

}

 

- (void)dealloc {

    [window release];

    [super dealloc];

}

 

 

@end

//////////////////////////////////////////////////

新建一个文件cplusplus,也就是一个类,也是改名成mm文件

class cplusplus

{

public:

int testadd(int a, int b);

};

 

#import "cplusplus.h"

 

int cplusplus::testadd(int a,int b)

{

return a + b;

}

 

//////////////////////////////////////////////////

再新建一个文件hellocpp ,也是一个内嵌类,也需要改成mm文件

#import 

 

#import "cplusplus.h"

 

@interface hellocpp : NSObject {

//这是内嵌类,自己试试自己知道

class hello : public cplusplus {

 

public:

void sayhello();

NSString *OCsayello();

};

 

}

 

@end

 

 

 

#import "hellocpp.h"

#import "cplusplus.h"

 

@implementation hellocpp

 

void hello::sayhello()

{

printf("say hello in hello");

}

 

NSStringhello::OCsayello()

{ //这种写法也可以,就会在oc类里也可以的。

NSLog(@"OC say hello");

return @"test";

}

@end

 

////////////////////////////////////////////

再新建一个文件useSTL,也是一个类,也需要改成mm文件

这回要使用的是c++中的stl的vector功能

//内嵌的类也是可以的

class useSTL {

public:

void testSTL();

};

//////////////////////////////////////////

 

 

#import "useSTL.h"

 

using namespace std;//这个也要写上才行

 

#import "vector"//记得头文件啊

#include 

 

void useSTL::testSTL()

{ //这段代码是网上随意copy的,有点修改。

int n = 9;

vector<int>* vectors = new vector<int>[n];

int i;

for(i=0; i

{

for(int j=0; j

{

int data;

cin>>data;

vectors[i].push_back(j);

}

}

cout<<"共有"<"vector,各vector元素如下:"<

for(i=0; i

{

cout<<""<1<<"vector的元素:";

int j;

for(j=0; jsize(); j++)

{

cout<"\t";

}

cout<

}

delete [] vectors;

}

 

确保工程可以编译通过,看一下运行的结果。

 

运行结果:

[Session started at 2010-11-02 15:56:56 +0800.]

2010-11-02 15:56:58.345 OCplusplus[10303:207] 10

2010-11-02 15:56:58.350 OCplusplus[10303:207] 33

say hello in hello2010-11-02 15:56:58.353 OCplusplus[10303:207] OC say hello

2010-11-02 15:56:58.354 OCplusplus[10303:207] test

2010-11-02 15:56:58.354 OCplusplus[10303:207] jhdglajdklfja

2010-11-02 15:56:58.355 OCplusplus[10303:207] ttttttttt

共有9vector,各vector元素如下:

1vector的元素:

2vector的元素:0

3vector的元素:0 1

4vector的元素:0 1 2

5vector的元素:0 1 2 3

6vector的元素:0 1 2 3 4

7vector的元素:0 1 2 3 4 5

8vector的元素:0 1 2 3 4 5 6

9vector的元素:0 1 2 3 4 5 6 7










本文转自 arthurchen 51CTO博客,原文链接:http://blog.51cto.com/arthurchen/577910,如需转载请自行联系原作者
目录
相关文章
|
Android开发 iOS开发 开发者
轻松实现 UniApp Xcode 上传 IPA 无需 Mac,appuploder 一键上传助你高效开发!
轻松实现 UniApp Xcode 上传 IPA 无需 Mac,appuploder 一键上传助你高效开发!
|
iOS开发 开发者
解决xcode doesn‘t support iphone’s ios 14.6 (18f72)
解决xcode doesn‘t support iphone’s ios 14.6 (18f72)
1056 3
|
缓存 安全 数据处理
Objective-C开发:从HTTP请求到文件存储的实战
Objective-C开发:从HTTP请求到文件存储的实战
|
设计模式 前端开发 Swift
探索iOS开发:Swift与Objective-C的较量
在这篇文章中,我们将深入探讨iOS开发的两大编程语言——Swift与Objective-C。我们将分析这两种语言的特性、优势和局限性,并讨论它们在现代iOS开发中的应用。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和建议。
562 3
|
测试技术 虚拟化 iOS开发
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
这篇文章是iOS自动化测试方案的第二部分,详细介绍了在Xcode开发者工具中构建WebDriverAgent(WDA)应用到iPhone的全过程,包括环境准备、解决构建过程中可能遇到的错误,以及最终成功安装WDA到设备的方法。
1904 0
iOS自动化测试方案(二):Xcode开发者工具构建WDA应用到iphone
|
IDE 开发工具 Swift
【Swift开发专栏】Swift的Xcode调试技巧
【4月更文挑战第30天】本文介绍了Swift开发者必备的Xcode调试技巧,分为三部分:调试界面概览、常用操作和高级技术。内容涵盖调试区域、断点管理、单步调试、变量查看及LLDB命令行调试。通过学习条件断点、异常断点、视图调试等高级技术,开发者能提升问题解决效率。熟悉这些工具将有助于优化开发流程并增强项目性能。
579 1
|
算法 编译器 Swift
【Swift开发专栏】Swift与Objective-C的对比
【4月更文挑战第30天】Swift与Objective-C对比:Swift语法简洁,支持元组、泛型和闭包,提高可读性;性能优化,使用LLVM编译器,与Objective-C兼容,便于迁移项目;生态系统活跃,苹果官方支持,丰富资源库。Objective-C虽历史悠久,但逐渐边缘化。对于新项目和开发者,Swift是更佳选择,驱动iOS开发创新。
1378 0
|
数据管理 API 开发工具
Objective-C网络请求开发的高效实现方法与技巧
Objective-C网络请求开发的高效实现方法与技巧
|
JSON 监控 安全
使用Objective-C开发的局域网监控微信的追踪系统
在当今数字化时代,随着社交软件的普及,人们越来越多地依赖于微信等应用来进行交流。然而,对于一些特定的情况,例如家长想要监控孩子的聊天记录,或者企业需要监督员工的通讯内容,开发一款能够监控微信的追踪系统显得尤为重要。在本文中,我们将介绍如何使用Objective-C语言来开发一款局域网监控微信的追踪系统,并且提供一些代码示例。
514 0
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。