Альтернатива для этой структуры данных (C ++) в Objective-C

0

У меня есть эта структура данных (struct) в C++:

struct Vector3f
{
    float x;
    float y;
    float z;

    Vector3f()
    {
    }

    Vector3f(float _x, float _y, float _z)
    {
        x = _x;
        y = _y;
        z = _z;
    }
};

Я недавно изучал и использовал Objective-C. Я обнаружил, что в Objective-C есть много вещей, которые я не могу сделать в C++. Итак, я хочу иметь возможность сделать это в Objective-C с помощью конструкторов. Я знаю, что Objective-C не поддерживает перегрузку функций, например C++. Итак, первый конструктор не требуется.

  • 0
    Так что вы пробовали?
  • 0
    Я сделал простую структуру, похожую на C ++, только с переменными. А затем добавьте функцию, в которую вы введете три переменные, и она создаст структуру Vector3f и назначит каждую переменную следующим образом: vec3f.x = _x; , и вернуть этот Vector3f
Теги:
struct

1 ответ

1
Лучший ответ

Вы просто использовали бы три свойства:

@interface Vector : NSObject

@property(nonatomic, assign) float x, y, z;

- (id)init;
- (id)initWithX:(float)x y:(float)y z:(float)z;

@end

@implementation Vector

- (id)init {
    // Members default to 0 implicitly.
    return [super init];
}

- (id)initWithX:(float)x y:(float)y z:(float)z {
    if (self = [super init]) {
        self.x = x;
        self.y = y;
        self.z = z;
    }

    return self;
}

@end

Обратите внимание, что переопределение init здесь необязательно, так как все, что он делает, это вызов метода суперкласса init.

  • 0
    Спасибо. Это ответило на мой вопрос. Я отмечу это, как вы решили, когда это позволит мне.
  • 0
    Если есть вероятность того, что класс будет разделен на подклассы, у него должен быть назначенный инициализатор, а другой инициализатор должен вызывать его self . Так что -init должен просто return [self initWithX:0 y:0 z:0]; ,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню