2012-04-20 10 views

उत्तर

25

प्रत्येक वर्ग में एक निर्माता होता है। हालांकि ... निर्माता varargin पर आधारित किसी भी संख्या और तर्कों को स्वीकार कर सकता है।

तो, जावा में एक डिफ़ॉल्ट तीसरा तर्क का विकल्प तो आप इस (java documentation के आधार पर उदाहरण) की तरह कुछ लिख सकता है प्रदान करने के लिए:

public Bicycle(int startCadence, int startSpeed, int startGear) { 
    gear = startGear; 
    cadence = startCadence; 
    speed = startSpeed; 
} 
public Bicycle(int startCadence, int startSpeed) { 
    gear = 1; 
    cadence = startCadence; 
    speed = startSpeed; 
} 

मैटलैब में आप लिख सकते हैं

methods (Access = public) 
    function self = Bicycle(varargin) 
     if nargin>2 
      gear = varargin{3}; 
     else 
      gear = 1; 
     end 
     cadence = varargin{1}; 
     speed = varargin{2};   
    end 
end 
+2

ध्यान दें कि आप एक if-statement के अंदर "स्वयं" नहीं बना सकते हैं, इसलिए पहली बार जब आप "स्वयं" को कुछ भी असाइन करते हैं तो उसे पहले-बाद में आना होगा। – Jonas

+0

इस समाधान के साथ समाप्त हुआ :) tnx! – bsmca

2

नहीं। ओओपी matlab में रचनाकार अन्य भाषाओं की तुलना में बहुत प्रतिबंधित हैं। यह दस्तावेज एएफएआईके में स्पष्ट रूप से नहीं बताया गया है कि आपके पास कई रचनाकार हो सकते हैं, लेकिन यह पूरे दस्तावेज़ में एकवचन में कक्षा के निर्माता को संदर्भित करता है।

http://www.mathworks.co.uk/help/techdoc/matlab_oop/brd2m9e-1.html

4

प्रत्येक वर्ग केवल एक निर्माता हैं, और प्रत्येक मीटर फ़ाइल केवल एक वर्ग परिभाषा हो सकते हैं।

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

+0

अच्छी पोस्ट ... लेकिन मूल पोस्टर को नोट करें: वास्तव में विरासत के साथ वास्तव में सावधान रहें। यह आपको अपने आप को लटकने के लिए बहुत सारी रस्सी देता है। अगर आप बस चाहते हैं तो इसका सहारा न लें एक डिफ़ॉल्ट कन्स्ट्रक्टर और अन्य रचनाकार जो चर को प्रारंभ कर सकते हैं। इस कार्यक्षमता को प्राप्त करने के लिए varargin का उपयोग करें। – learnvst

+0

समान वर्ग, केवल प्रारंभिक प्रक्रिया की प्रक्रिया अलग है। मुझे लगता है कि मैं इन दो तरीकों से एक उदाहरण बनाने के लिए आवश्यक सभी पैरामीटर पास करूंगा , और एक मो फिर पैरामीटर जो निर्माण के तरीके को परिभाषित करेगा। गंदा लेकिन जल्दी .. उदास, मेरा समाधान इतना समझ में आ रहा था .. आप पर शर्म की बात है! – bsmca

+0

@bsmca: आप हमेशा (स्थैतिक) विधियों को परिभाषित कर सकते हैं जो निर्माण के दो अलग-अलग तरीकों को लागू करते हैं, और फिर आप उनमें से किसी एक को सामान्य कन्स्ट्रक्टर से कॉल करते हैं। बस सुनिश्चित करें कि आप केवल ऑब्जेक्ट को पहले या बाद में बनाते हैं, लेकिन इन तरीकों के अंदर नहीं। – Jonas

2

पीछा कार्यों का उत्तर, लेकिन फ़ंक्शन से परिचित कोई उपयोगकर्ता यह नहीं देख सकता कि कितने तर्क की आवश्यकता है या वे क्या हैं। मैं इस सिफारिश करेंगे:।।

methods (Access = public) 
    function self = Bicycle(startCadence, startSpeed, startGear) 
     if nargin>2 
      gear = startGear; 
     else 
      gear = 1; 
     end 
     cadence = startCadence; 
     speed = startSpeed;   
    end 
end 

अब आप टाइप "साइकिल (" और इंतजार आप कम से कम तीन तर्क देख सकते हैं दूसरी संभावना है, हालांकि नहीं दिखाया गया है यह संभव है (साजिश के लिए उदाहरण के लिए), लेकिन मैं डॉन यह नहीं पता कि यह कैसे करें।

+0

क्या यह वास्तव में आपके लिए काम करता है? मुझे "पर्याप्त इनपुट तर्क त्रुटि नहीं है" (MATLAB: minrhs) यदि मैं सभी तर्क (2014a और बी पर) प्रदान नहीं करता हूं। यह "मुक्त" कार्यों पर काम करता प्रतीत होता है, लेकिन रचनाकार/वर्ग के सदस्य नहीं। –

संबंधित मुद्दे