मूल रूप से मैं कुछ इस तरह का उपयोग करना चाहते:क्यों (झूठा? ए(): बी())। परीक्षण() केवल तभी संकलित हो जब ए और बी में उप-वर्ग संबंध हो?
(true?a:b).test()
(true?a.test():b.test())
आदेश समय टाइपिंग समारोह एक ही नाम है, तो बचाने के लिए के बजाय
, शुरू में मैंने सोचा कि यह मान्य होना चाहिए, लेकिन मैंने पाया:
#include <stdio.h>
class A{
public:
char test(){
return 'A';
}
};
class B{
public:
char test(){
return 'B';
}
};
int main(){
printf("%c\n",(false?A():B()).test());
return 0;
}
संकलन नहीं कर सकते, लेकिन अगर B
A
के उपवर्ग है:
#include <stdio.h>
class A{
public:
char test(){
return 'A';
}
};
class B : public A{
public:
char test(){
return 'B';
}
};
int main(){
printf("%c\n",(false?A():B()).test());
return 0;
}
यह संकलित कर सकता है, क्यों?
जिस वस्तु को आप वापस करने का प्रयास करते हैं उसे उसी इंटरफ़ेस के अनुरूप होना चाहिए, आपके मामले में इसे 'test' विधि को लागू करना होगा। कंपाइलर को यह सुनिश्चित करना चाहिए कि किसी भी मामले में वापस ऑब्जेक्ट इंटरफ़ेस के अनुरूप होगा। – mic4ael
क्योंकि सी ++ वास्तव में विधियों के गतिशील प्रेषण नहीं करता है (उदाहरण के लिए पायथन)। –
ध्यान दें कि 'सत्य' a.test(): b.test() 'विफल होगा यदि 'test' परिणामों के लिए कोई सामान्य प्रकार नहीं है। – Jarod42