fork download
  1. #include <iostream>
  2. using namespace std ;
  3.  
  4. class Foo
  5. {
  6. /*** メンバ関数 ***/
  7. /* 修飾子 */ static
  8. /* 戻り値の型 */ int
  9. /* 関数名 */ count
  10. /* 引数ここから */ (
  11. /* 引数ここまで */ )
  12. {
  13. static int c = 0 ;
  14. return ( c++ ) ;
  15. }
  16.  
  17. /*** メンバ変数 ***/
  18. int id ;
  19.  
  20. public:
  21. /*** コンストラクタ ***/
  22. Foo() : id( count() )
  23. {
  24. cout << "デフォルトコンストラクタ " << id << endl ;
  25. }
  26. Foo( const Foo & foo ) : id( count() )
  27. {
  28. cout << "コピーコンストラクタ " << id << " from " << foo.id << endl ;
  29. }
  30.  
  31. /*** 演算子のオーバーロード ***/
  32. Foo & operator = ( const Foo & foo )
  33. {
  34. cout << "代入演算子のオーバーロード " << id << " from " << foo.id << endl ;
  35. }
  36.  
  37. /*** デストラクタ ***/
  38. ~Foo()
  39. {
  40. cout << "デストラクタ " << id << endl ;
  41. }
  42.  
  43. /*** メンバ関数 ***/
  44. /* 修飾子 */
  45. /* 戻り値の型 */ int
  46. /* 関数名 */ getId
  47. /* 引数ここから */ (
  48. /* 引数ここまで */ )
  49. /* メンバへのアクセス */ const
  50. {
  51. return ( id ) ;
  52. }
  53. } ;
  54.  
  55. /* 修飾子 */
  56. /* 戻り値の型 */ const Foo
  57. /* 関数名 */ func1
  58. /* 引数ここから */ (
  59. /* 1 */ /* 型 */ const Foo
  60. /* 仮引数名 */ foo
  61. /* 引数ここまで */ )
  62. {
  63. cout << "Foo func1(const Foo) " << foo.getId() << endl ;
  64. return ( foo ) ;
  65. }
  66.  
  67. /* 修飾子 */
  68. /* 戻り値の型 */ const Foo &
  69. /* 関数名 */ func2
  70. /* 引数ここから */ (
  71. /* 1 */ /* 型 */ const Foo &
  72. /* 仮引数名 */ foo
  73. /* 引数ここまで */ )
  74. {
  75. cout << "Foo & func2(const Foo&) " << foo.getId() << endl ;
  76. return ( foo ) ;
  77. }
  78.  
  79. /* 修飾子 */
  80. /* 戻り値の型 */ const Foo *
  81. /* 関数名 */ func3
  82. /* 引数ここから */ (
  83. /* 1 */ /* 型 */ const Foo *
  84. /* 仮引数名 */ foo
  85. /* 引数ここまで */ )
  86. {
  87. cout << "Foo * func3(const Foo*) " << foo->getId() << endl ;
  88. return ( foo ) ;
  89. }
  90.  
  91. /* 修飾子 */
  92. /* 戻り値の型 */ int
  93. /* 関数名 */ main
  94. /* 引数ここから */ (
  95. /* 引数ここまで */ )
  96. {
  97. Foo foo ;
  98. Foo bar = foo ;
  99. Foo baz ;
  100. Foo foobar ( foo ) ;
  101.  
  102. baz = foo ;
  103.  
  104. func1( foo ) ;
  105. func2( foo ) ;
  106. func3( &foo ) ;
  107.  
  108. func1(
  109. func2(
  110. func2(
  111. func1( foo )
  112. )
  113. )
  114. ) ;
  115.  
  116. return ( 0 ) ;
  117. }
Success #stdin #stdout 0s 3300KB
stdin
Standard input is empty
stdout
デフォルトコンストラクタ 0
コピーコンストラクタ 1 from 0
デフォルトコンストラクタ 2
コピーコンストラクタ 3 from 0
代入演算子のオーバーロード 2 from 0
コピーコンストラクタ 4 from 0
Foo func1(const Foo) 4
コピーコンストラクタ 5 from 4
デストラクタ 5
デストラクタ 4
Foo & func2(const Foo&) 0
Foo * func3(const Foo*) 0
コピーコンストラクタ 6 from 0
Foo func1(const Foo) 6
コピーコンストラクタ 7 from 6
Foo & func2(const Foo&) 7
Foo & func2(const Foo&) 7
コピーコンストラクタ 8 from 7
Foo func1(const Foo) 8
コピーコンストラクタ 9 from 8
デストラクタ 9
デストラクタ 8
デストラクタ 7
デストラクタ 6
デストラクタ 3
デストラクタ 2
デストラクタ 1
デストラクタ 0