読者です 読者をやめる 読者になる 読者になる

Objective-Cで演算子のオーバーロード

Objective-C C++

こんなことする必要性が無いかもしれませんが、とりあえず、Objective-Cの動的型付けを利用して演算子のオーバーロードがしたいっていう謎な仕様にしてしまった小さなプログラムがありまして、ちょっと試してみました。

//  AValue.m
#include <iostream>
#import <Foundation/Foundation.h>

using namespace std;

/////// valueクラスの定義
@interface value:NSObject
{
	int v;
}
- (id)initWithValue:(int)value;
@property (readwrite) int v;
@end

@implementation value 
@synthesize v;
// イニシャライザ
- (id)initWithValue:(int)value
{
    self = [super init];
    if (self) {
        v = value;
    }
    return self;
}
@end

/////// +演算子のオーバーロード
value * operator +(value &v1, value &v2) {
int x = v1.v + v2.v;
return [[value alloc] initWithValue:x];
}

/////// main
int main(void)
{
	value *a = [[value alloc] initWithValue:1];
	value *b = [[value alloc] initWithValue:3];
	value *c = *a+*b;
	cout << c.v << endl;
	return 0;
}

汚い変数の決め方でvaluevalueしてますが、とりあえずクラス名のと変数名のがあります。
ここでは最終的にはただの整数の足し算しかしてませんが、クラスはObjective-Cで宣言して、それをoperatorを使って+演算子をオーバーロードして計算できていることがわかります。

ちょっとまだ動的特性はちゃんと見てないですが。。。なんか結局静的に計算されるんですかね。よくわからない素人ですはい。