2013-08-03 38 views
5

Trong Objective-C tôi bắt đầu làm việc với CGPoints và khi tôi cần thêm hai người bọn họ cách tôi đang làm nó là thế này:Arithmetic trên hai CGPoints với + hoặc - nhà khai thác

CGPoint p1 = CGPointMake(3, 3); 
CGPoint p2 = CGPointMake(8, 8); 
CGPoint p3 = CGPointMake(p2.x-p1.x, p2.y-p1.y); 

Tôi muốn có thể thực hiện:

CGPoint p3 = p2 - p1; 

Điều đó có thể?

+0

Vâng, ít nhất là trong Xcode dành cho iOS Tôi nhận được lỗi "toán hạng không hợp lệ để biểu nhị phân ('CGPoint' (aka 'struct CGPoint') và 'CGPoint')" – ndomin

+3

Yeah. Không thể trong C. Bạn có thể sắp xếp một thứ gì đó trong C++ với quá tải toán tử, nhưng nói chung là không. – ipmcc

+0

@ipmcc ok, cảm ơn bạn – ndomin

Trả lời

8

Và đây là "cái gì đó" mà @ipmcc đề xuất: quá tải toán tử C++. Cảnh báo: không làm điều này ở nhà.

CGPoint operator+(const CGPoint &p1, const CGPoint &p2) 
{ 
    CGPoint sum = { p1.x + p2.x, p1.y + p2.y }; 
    return sum; 
} 
+0

Bạn có thể quá tải các toán tử trên 'struct's ?! Tôi đã thực sự phải làm việc trên C++ của tôi. –

+1

@JoshCaswell Vâng, 'struct' thực sự giống như 'lớp', ngoại trừ việc chúng có khả năng hiển thị thành viên được đặt thành' public' theo mặc định. –

+0

Đó là một cái gì đó khá. –

2

Bạn không thể sử dụng toán tử số học vào ngày struct giây. Điều tốt nhất bạn có thể làm là một hàm:

CGPoint NDCGPointMinusPoint(CGPoint p1, CGPoint p2) 
{ 
    return (CGPoint){p1.x-p2.x, p1.y-p2.y}; 
} 
+0

Rất tốt và đơn giản, cảm ơn! – turingtested