我在实现用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;
}
答案 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
需要注意的一些差异:
setID:
方法用于等价,但在Objective-C初始值设定项中使用setter被认为是不好的形式,因此它实际上从未被调用过 - 我只是将方法的主体复制到init方法中