प्रश्न: मैं समझता हूं कि मूल आयत वर्ग का एक उदाहरण चर है जिसमें XYPoint प्रकार है। मूल उदाहरण चर के दो अन्य उदाहरण चर x और y हैं। मुझे स्पष्ट रूप से समझ में नहीं आ रहा है कि आयत वर्ग में बयान क्या होता है?

मेरा मानना था कि यदि (मूल!) का अर्थ है कि यदि उत्पत्ति शून्य के बराबर नहीं है, तो निम्न कार्य करें ... क्या मूल शून्य के बराबर है? यदि हाँ, यह शून्य के बराबर कैसे है और यह कैसे (यदि! मूल) कथन में मान्य है। दूसरे शब्दों में, अगर (! मूल) कथन क्या करता है?

क्या कोई उदाहरण है जहां मूल शून्य के बराबर है? यदि ऐसा होता है, तो मेरा कोड कैसे प्रतिक्रिया देगा? मुझे पता है कि अगर स्टेटमेंट के बिना myPoint ऑब्जेक्ट अपने प्रारंभिक मूल्य को बरकरार नहीं रखेगा।

मैं यह भी जानना चाहूंगा कि हमने आयात के बजाय आयत वर्ग में वर्ग निर्देश का उपयोग क्यों किया। क्या फरक पड़ता है। मैंने यह भी देखा कि हमने आयत के कार्यान्वयन पर XYPoint हेडर आयात नहीं किया। अगर कोई मदद करने को तैयार हो तो मैं बहुत आभारी रहूंगा। आपका अग्रिम रूप से बोहोत धन्यवाद।

NB: कृपया नीचे मेरे कोड पर एक नज़र रखना।


* XYPoint क्लास

 #import <Foundation / Foundation.h>

 @interface XYPoint: NSObject

 @property int x, y;

 -(void) setX: (int) Xval andY: (int) yVal;
 @end

 #import "XYPoint.h"

 @implementation  XYPoint

 @synthesize x, y;

 -(void) setX: (int) Xval andY: (int) yVal
  { x = xVal;
    y = yVal;
  }
  @end

* आयत वर्ग

#import <Foundation/Foundation.h>

@class XYPoint;
@interface Rectangle: NSObject

-(XYPoint *) origin;
-(void) setOrigin: (XYPoint *) pt;
@end

#import "Rectangle.h"

@implementation Rectangle
{ 
 XYPoint *origin
}

 -(void) SetOrigin: (XYPoint *) pt
{
 if (! origin)
 origin = [[XYPoint alloc]init];
 origin.x = pt.x;
 origin.y = pt.y;
}

-(XYPoint *) origin
{
  return origin;
}
@end

Main

#import "Rectangle.h"
#import "XYPoint.h"

int main (int argc, char *argv[])
{
  @autoreleasepool {
  XYPoint *myPoint = [[XYPoint alloc]init];

  [myPoint setX: 100 andY: 200];
  myRect.origin = myPoint;

  NSLog (@"Origin at (%i, %i)" , myRect.origin.x, myRect.origin.y); 

  [myPoint setX: 50 andY: 75];

  NSLog (@"Origin at (%i, %i)" , myRect.origin.x, myRect.origin.y);
}
@end

Origin at (100, 200)
Origin at (100, 200)

0
Dr.P 22 नवम्बर 2015, 13:09

2 जवाब

सबसे बढ़िया उत्तर

एक उदाहरण चर को परिभाषित करने से एक सूचक बनता है जिसका उपयोग किसी उदाहरण को संदर्भित करने के लिए किया जा सकता है। यह आपके लिए एक उदाहरण नहीं बनाता है। तो, शुरू में कोई उत्पत्ति नहीं है।

यदि विवरण की जाँच करता है कि यदि उत्पत्ति अभी तक मौजूद है, और यदि यह एक नया नहीं बनाता है, तो कोड पैरामीटर में पारित किए गए मान से कॉपी करता है।

एक तरफ: आदर्श रूप से बिंदु वर्ग अपरिवर्तनीय होगा और नए उदाहरण बनाने और बार-बार पारित पैरामीटर को कॉपी करने के बजाय उन्हें बार-बार कॉपी करने के लिए लागू करना होगा। नकल करना अपरिवर्तनीय वर्ग में कुछ भी नहीं (स्व-वापसी) करेगा और भविष्य में एक उत्परिवर्तित वर्ग को जोड़ने के लिए केवल समर्थन करना है।

1
Wain 22 नवम्बर 2015, 10:50

जब ऑब्जेक्ट ऑब्जेक्ट घोषित किया जा रहा है तो चर nil पर सेट किया जाता है जो C / उद्देश्य-सी के संदर्भ में शून्य है।

किसी ऑब्जेक्ट का उपयोग करने के लिए इसे इनिशियलाइज़ किया जाना चाहिए। यही if स्टेटमेंट चेक करता है और करता है

if (! origin) // alternative syntax if (origin == nil)
  origin = [[XYPoint alloc] init];

माध्यम

यदि वस्तु nil है तो इसे प्रारंभ करें। अगर लाइन को स्किप न करें।

class निर्देश के बजाय import स्टेटमेंट का उपयोग तब किया जाता है जब कोड में केवल क्लास के प्रकार का उल्लेख किया जाता है और हेडर फाइल की आवश्यकता नहीं होती है। यदि कोड अलग-अलग फ़ाइलों में लिखे गए हैं तो आपके कोड में आयात विवरण आवश्यक है।

पुनश्च: आपके कोड में कुछ लोअरकेस / अपरकेस टाइपो हैं और एक अर्धविराम गायब है।

0
vadian 22 नवम्बर 2015, 11:15