基本C ++类如何用Objective C实现

时间:2010-05-17 17:21:32

标签: c++ objective-c

我在实现用C ++编写的类时遇到一些问题,因为我不熟悉c ++ ..如果有人可以帮助在Objective C中实现它

#ifndef ENTITY_H
#define ENTITY_H

class BaseGameEntity
{

private:

  int          m_ID;
  static int  m_iNextValidID;

  void SetID(int val);

public:

  BaseGameEntity(int id)
  {
    SetID(id);
  }

  virtual ~BaseGameEntity(){}

  virtual void  Update()=0;

  int           ID()const{return m_ID;}  
};



#endif


#include "BaseGameEntity.h"
#include <cassert>

int BaseGameEntity::m_iNextValidID = 0;

void BaseGameEntity::SetID(int val)
{
  assert ( (val >= m_iNextValidID) && "<BaseGameEntity::SetID>: invalid ID");

  m_ID = val;

  m_iNextValidID = m_ID + 1;
}

1 个答案:

答案 0 :(得分:1)

这相当于C ++类:

// In BaseGameEntity.h
#import <Cocoa/Cocoa.h>

@interface BaseGameEntity : NSObject {
    NSInteger m_ID;
}

- (id)initWithID:(NSInteger)ID;
- (void)update; // must be defined by subclasses
- (NSInteger)ID;
@end


// In BaseGameEntity.m
#import "BaseGameEntity.m"

@implementation BaseGameEntity
static NSInteger m_iNextValidID;

- (id)initWithID:(NSInteger)ID {
    self = [super init];
    if (!self)
        return nil;
    NSAssert2(ID >= m_iNextValidID, @"%s invalid id: %d", __PRETTY_FUNCTION__, ID);
    m_ID = ID;
    m_iNextValidID = m_ID + 1;
    return self;
}

- (NSInteger)ID {
    return m_ID;
}

- (void)setID:(NSInteger)newID {
    NSAssert2(newID >= m_iNextValidID, @"%s invalid id: %d", __PRETTY_FUNCTION__, newID);
    m_ID = newID;
    m_iNextValidID = m_ID + 1;
}
@end

需要注意的一些差异:

  • 所有方法在Objective-C中都是虚拟的,因此不需要将它们声明为
  • Objective-C没有纯虚函数
  • Objective-C没有类静态变量 - 它只有像C一样的函数静态和文件静态变量 - 所以我们在实现文件中声明了静态int
  • 我包含setID:方法用于等价,但在Objective-C初始值设定项中使用setter被认为是不好的形式,因此它实际上从未被调用过 - 我只是将方法的主体复制到init方法中