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,如需转载请自行联系原作者
目录
相关文章
|
编解码 测试技术 iOS开发
iPhone 屏幕尺寸和开发适配
【10月更文挑战第23天】iPhone 的屏幕尺寸变化给开发者带来了一定的挑战,但也为创新提供了机遇。通过深入了解不同屏幕尺寸的特点,遵循适配原则和策略,运用合适的技巧和方法,我们能够为用户提供在不同 iPhone 机型上都具有良好体验的应用。在未来,随着技术的不断进步,我们还需要持续学习和适应,以满足用户对优质应用体验的不断追求。
|
IDE 开发工具 C语言
C++一分钟之-嵌入式编程与裸机开发
通过这些内容的详细介绍和实例解析,希望能帮助您深入理解C++在嵌入式编程与裸机开发中的应用,提高开发效率和代码质量。
428 13
WK
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
891 1
|
编解码 iOS开发 UED
响应式设计在 iPhone 开发适配中的具体应用
【10月更文挑战第23天】响应式设计在 iPhone 开发适配中扮演着至关重要的角色,它能够帮助我们打造出适应不同屏幕尺寸和用户需求的高质量应用。通过合理运用响应式设计的原则和方法,我们可以在提供良好用户体验的同时,提高开发效率和应用的可维护性。
|
Rust 资源调度 安全
为什么使用 Rust over C++ 进行 IoT 解决方案开发
为什么使用 Rust over C++ 进行 IoT 解决方案开发
453 7
|
物联网 C# C语言
物联网开发中C、C++和C#哪个更好用
在物联网(IoT)开发中,C、C++和C#各有优缺点,适用场景不同。C语言性能高、资源占用低,适合内存和计算能力有限的嵌入式系统,但开发复杂度高,易出错。C++支持面向对象编程,性能优秀,适用于复杂应用,但学习曲线陡峭,编译时间长。C#易于学习,与.NET框架结合紧密,适合快速开发Windows应用,但性能略低,平台支持有限。选择语言需根据具体项目需求、复杂性和团队技术栈综合考虑。
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
617 1
WK
|
开发框架 移动开发 Java
C++和Java哪个更适合开发移动应用
本文对比了C++和Java在移动应用开发中的优劣,从市场需求、学习难度、开发效率、跨平台性和应用领域等方面进行了详细分析。Java在Android开发中占据优势,而C++则适合对性能要求较高的场景。选择应根据具体需求和个人偏好综合考虑。
WK
491 0
WK
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
529 0
|
NoSQL API Redis
如何使用 C++ 开发 Redis 模块
如何使用 C++ 开发 Redis 模块

热门文章

最新文章