मैं भाग का उपयोग करने के लिए एक वस्तु एक अलग तरीके से व्यवहार किया जाता है, जहां पदानुक्रम में यह गिर जाता है पर निर्भर करता है करना चाहते हैंसी ++ अधिभार संकल्प
मान लें आप की तरह आकार वस्तुओं की एक पदानुक्रम का निर्माण:
class Ray
{
Intersection intersects(const Sphere * s) ;
Intersection intersects(const Triangle * t) ;
};
:
class Shape {} ;
class Sphere : public Shape {} ;
class Triangle : public Shape {} ; ...
फिर आप की तरह के तरीकों के साथ एक रे वर्ग से लैस नहीं कर सकते हैं:
आप विभिन्न प्रकार के मिश्रित आकार * की एक सरणी की दुकान और फोन
vector<Shape*> shapes ; ...
//foreach shape..
Intersection int = ray.intersects(shapes[ i ])
लेकिन तुम संकलक त्रुटि
त्रुटि C2664 मिलती है: 'चौराहे रे :: intersects (स्थिरांक क्षेत्र *) स्थिरांक' करने के लिए 'आकार * स्थिरांक' से पैरामीटर 1 कन्वर्ट 'स्थिरांक क्षेत्र *'
क्या तुम गलत क्या किया?
साथ
class Shape
{
virtual Intersection intersects(const Ray* ray)=0 ;
} ;
तो प्रत्येक वर्ग ओवरराइड काटती है यह अन्य चारों ओर जिस तरह से करने के लिए एक ही रास्ता है? तब
//foreach shape..
Intersection int = shapes[i]->intersects(ray) ;
करने के लिए कॉल आप यह पहली तरह से मैं पता चला है या कभी नहीं कर सकता हूँ?
मुझे लगता है कि [एकाधिक (डबल) प्रेषण] (http://en.wikipedia.org/wiki/Multiple_dispatch) है। सी ++ में यह मूल रूप से नहीं है। –
[विरासत हमेशा सही नहीं है।] (Http: //en.wikipedia।संगठन/विकी/सर्कल-एलीपसे_प्रोबलेम) –