IOS第十二天——Obj-C++

转眼间已经快半个月了,从正式开始学习Obj-C到现在已经差不多接近半个月了,这段时间算是对Obj-C这门语言有了一个简单而初步的认识,那么我们今天来学习下Obj-C++,所谓的Obj-C++,就是将Obj-C和代码和C++代码整合在同一个文件里面,这种Obj-C/C++的混合就叫做Obj-C++,它可以让开发者在Obj-C应用程序里加入C++库。

在Obj-C++中,我们可以在Obj-C代码中调用C++的方法,反之亦然,对象的指针在两种语言里都仅仅是指针,可以被用在任何地方。那么需要注意的是Obj-C和C++混编的时候,我们需要把文件保存为.mm格式的,这样方便编译器识别,下面的代码演示了两种语言类的对象的互相引用:

#import <Foundation/Foundation.h>
//定义一个C++类
Class Hello
{
    private:
        id greeting_text;//NSString对象
    public:
    Hello()//类Hello的构造函数
    {
        greeting_text=@"Hello, world!";
    }
    Hello(const char* initial_greeting_text)//类Hello的构造函数
    {
        greeting_text=[[NSString alloca] initWithUTF8String:initial_greeting_text];
    }
    void say_hello()
    {
        printf("%s\n",[greeting_text UTF8String])
    }
};

//定义一个Obj-C类Greeting
@interface Greeting : NSObject
{
    Hello *hello;
}
//类Greeting的方法定义
-(id)init;
-(void)dealloc;
-(void)sayGreeting;
-(void)sayGreeting:(Hello*)greeting;
@end
@implementation Greeting
(id)init
{
    self=[super init];
    if(self)
    {
        hello=new Hello();//实例化一个C++对象,注意C++与Obj-C混用的时候最好使用new操作符来实例化C++对象
    }
    return self;
}
(void)dealloc
{
    delete hello;//删除C++对象hello
    [super dealloc];
}
(void)sayGreeting
{
    hello->say_hello();//调用C++类Hello的say_hello函数
}
(void)sayGreeting:(Hello*)greeting
{
    greeting->say_hello();
}
@end

int main()
{
    NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
    Greeting *greeting=[[Greeting alloc] init];//实例化Greeting对象
    [greeting sayGreeting];                     //输出Hello, world!
    Hello *hello=new Hello("Bonjour, monde!");  //实例化Hello对象
    [greeting sayGreeting:hello];               //输出Bonjour, monde!
    delete hello;                               //释放hello对象
    [greeting release];
    return 0;
}

那么上面的代码中,我们在C++类Hello中运用了Obj-C对象NSString,而在Obj-C类Greeting中引用了C++类Hello作为实例变量,并在Obj-C类方法中调用了C++类的方法,需要注意的是,Obj-C不能继承C++类,反之亦不能。

同时一些C++的特性也不能加入到Obj-C中,反之亦然,而且,两种语言的异常处理也是不兼容的,所以这块儿我们简单的了解一下。

OK,鉴于我没有学过C++,所以这块儿对我来说,确实是简单的了解一下,那么以后的开发过程中,相信我还是会更多的采用Obj-C来开发,不过了解下C,确实跟很多技术大牛说的那样儿,对底层的一些东西理解起来会更容易一些。

2013年04月25日,Eric.Tang 记


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值