fork download
  1. #include <stdio.h>
  2.  
  3. class Double
  4. {
  5. public:
  6. Double operator +( Double other ){ printf( "Double::operator+(Double)\n" ); return *this; }
  7. };
  8. class Float
  9. {
  10. public:
  11. operator Double(){ printf( "Float to Double\n" ); return Double(); }
  12. };
  13. class Float2
  14. {
  15. public:
  16. operator Double(){ printf( "Float2 to Double\n" ); return Double(); }
  17. Double operator +( Double other ){ printf( "Float2::operator+(Double)\n" ); return Double(); }
  18. };
  19.  
  20.  
  21. int main( void )
  22. {
  23. Double d;
  24. Float f;
  25. Float2 f2;
  26.  
  27. printf( "[1]\n" );
  28. d + d;
  29.  
  30. printf( "[2]\n" );
  31. d + f; // fはDoubleへ暗黙の型変換が発生する。
  32.  
  33. /* error: 左オペランドに暗黙の型変換は発生しないのでエラーになる。
  34.   f + d;
  35.   */
  36.  
  37. printf( "[3]\n" );
  38. f2 + d; // 左オペランドに暗黙の型変換は発生しないが、Float2はoperator+(Double)を持っているのでエラーにならない。
  39.  
  40. return 0;
  41. }
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
[1]
Double::operator+(Double)
[2]
Float to Double
Double::operator+(Double)
[3]
Float2::operator+(Double)