iPhone开发入门(7)--- 从C/C++语言到Objective-C语言
Objective-C,通常写作ObjC和较少用的Objective C或Obj-C,是扩充C的面向对象编程语言。所以有一定C/C++语言基础理解和掌握Objective-C也会相应的快些。这回,我们将比较着学习Objective-C语言,掌握其语法并理解其思想。
语法
让我们先来看看C++和Objective-C中对于类的宣言 :
C++
#include "BaseClass.h"
class MyClass : public BaseClass
{
public:
MyClass();
virtual ~MyClass();
virtual int GetValue() const;
virtual void SetValue(int inValue);
bool IsValid() const;
static MyClass* GetInstance();
private:
int mValue;
static MyClass* sInstance;
};
Objective-C
#import "BaseClass.h"
@interface MyClass : BaseClass
{
int mValue;
}
- (int) getValue;
- (void) setValue: (int) inValue;
- (BOOL) isValid;
+ (MyClass*) getInstance;
@end
通过比较上面两段代码,从语法的角度上我们看到 Objective-C 语言有以下特点:
用 #import 取代了 #include
#import 相当于 C/C++ 语言中的 #include+#pragma once。当头文件嵌套包含的时候,它的作用就发挥出来了。
当某一头文件已经被读取后,又一次被 #include 的时候,#pragma once 这会跳过该次读取。
比如我们在C/C++语言的头文件中常常这样定义,就是为了实现 #pragma once 而做的 :1
2
3 #ifndef INCLUDED_BASECLASS_H
#include "BaseClass.h"
#endif
继承的时候没有限定符
继承都是 public 的。没有构建和虚构函数
成员变量/函数没有限定符
成员变量缺省是 private 的,而函数是 public 的。没有const关键字
没有virtual关键字
Objective-C 中函数缺省的就是 virtual 的。接下来再看看具体的实现 :
C++
#include "MyClass.h"
#include <assert.h>
MyClass* MyClass::sInstance = 0;
MyClass::MyClass() : mValue(0)
{
}
MyClass::~MyClass()
{
mValue = -1;
}
int MyClass::GetValue() const
{
return (mValue);
}
void MyClass::SetValue(int inValue)
{
assert(IsValid());
mValue = inValue;
}
bool MyClass::IsValid() const
{
return (0 <= inValue && inValue <= 1000);
}
MyClass* MyClass::GetInstance()
{
if (sInstance == 0) {
sInstance = new MyClass();
}
return (sInstance);
}
Objective-C
#import "MyClass.h"
static MyClass* sInstance = 0;
@implementation MyClass
- (int) getValue
{
return (mValue);
}
- (void) setValue: (int) inValue
{
NSParameterAssert([self isValid]);
mValue = inValue;
}
- (BOOL) &nb
相关新闻>>
- 发表评论
-
- 最新评论 更多>>