#include <iostream>
using namespace std ;
class Foo
{
/*** メンバ関数 ***/
/* 修飾子 */ static
/* 戻り値の型 */ int
/* 関数名 */ count
/* 引数ここから */ (
/* 引数ここまで */ )
{
static int c = 0 ;
return ( c++ ) ;
}
/*** メンバ変数 ***/
int id ;
public:
/*** コンストラクタ ***/
Foo() : id( count() )
{
cout << "デフォルトコンストラクタ " << id << endl ;
}
Foo( const Foo & foo ) : id( count() )
{
cout << "コピーコンストラクタ " << id << " from " << foo.id << endl ;
}
/*** 演算子のオーバーロード ***/
Foo & operator = ( const Foo & foo )
{
cout << "代入演算子のオーバーロード " << id << " from " << foo.id << endl ;
}
/*** デストラクタ ***/
~Foo()
{
cout << "デストラクタ " << id << endl ;
}
/*** メンバ関数 ***/
/* 修飾子 */
/* 戻り値の型 */ int
/* 関数名 */ getId
/* 引数ここから */ (
/* 引数ここまで */ )
/* メンバへのアクセス */ const
{
return ( id ) ;
}
} ;
/* 修飾子 */
/* 戻り値の型 */ const Foo
/* 関数名 */ func1
/* 引数ここから */ (
/* 1 */ /* 型 */ const Foo
/* 仮引数名 */ foo
/* 引数ここまで */ )
{
cout << "Foo func1(const Foo) " << foo.getId() << endl ;
return ( foo ) ;
}
/* 修飾子 */
/* 戻り値の型 */ const Foo &
/* 関数名 */ func2
/* 引数ここから */ (
/* 1 */ /* 型 */ const Foo &
/* 仮引数名 */ foo
/* 引数ここまで */ )
{
cout << "Foo & func2(const Foo&) " << foo.getId() << endl ;
return ( foo ) ;
}
/* 修飾子 */
/* 戻り値の型 */ const Foo *
/* 関数名 */ func3
/* 引数ここから */ (
/* 1 */ /* 型 */ const Foo *
/* 仮引数名 */ foo
/* 引数ここまで */ )
{
cout << "Foo * func3(const Foo*) " << foo->getId() << endl ;
return ( foo ) ;
}
/* 修飾子 */
/* 戻り値の型 */ int
/* 関数名 */ main
/* 引数ここから */ (
/* 引数ここまで */ )
{
Foo foo ;
Foo bar = foo ;
Foo baz ;
Foo foobar ( foo ) ;
baz = foo ;
func1( foo ) ;
func2( foo ) ;
func3( &foo ) ;
func1(
func2(
func2(
func1( foo )
)
)
) ;
return ( 0 ) ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkIDsKCmNsYXNzIEZvbwp7CgkvKioqIOODoeODs+ODkOmWouaVsCAqKiovCgkvKiDkv67po77lrZAgKi8gCQlzdGF0aWMKCS8qIOaIu+OCiuWApOOBruWeiyAqLyAJaW50CgkvKiDplqLmlbDlkI0gKi8gCQljb3VudAoJLyog5byV5pWw44GT44GT44GL44KJICovICgKCS8qIOW8leaVsOOBk+OBk+OBvuOBpyAqLyApCgl7CgkJc3RhdGljIGludCBjID0gMCA7CgkJcmV0dXJuICggYysrICkgOwoJfQoJCgkvKioqIOODoeODs+ODkOWkieaVsCAqKiovCglpbnQgaWQgOwoKcHVibGljOgoJLyoqKiDjgrPjg7Pjgrnjg4jjg6njgq/jgr8gKioqLwoJRm9vKCkgOiBpZCggY291bnQoKSApCgl7CgkJY291dCA8PCAi44OH44OV44Kp44Or44OI44Kz44Oz44K544OI44Op44Kv44K/ICIgPDwgaWQgPDwgZW5kbCA7Cgl9CglGb28oIGNvbnN0IEZvbyAmIGZvbyApIDogaWQoIGNvdW50KCkgKQoJewoJCWNvdXQgPDwgIuOCs+ODlOODvOOCs+ODs+OCueODiOODqeOCr+OCvyAiIDw8IGlkIDw8ICIgZnJvbSAiIDw8IGZvby5pZCA8PCBlbmRsIDsKCX0KCQoJLyoqKiDmvJTnrpflrZDjga7jgqrjg7zjg5Djg7zjg63jg7zjg4kgKioqLwoJRm9vICYgb3BlcmF0b3IgPSAoIGNvbnN0IEZvbyAmIGZvbyApCgl7CgkJY291dCA8PCAi5Luj5YWl5ryU566X5a2Q44Gu44Kq44O844OQ44O844Ot44O844OJICIgPDwgaWQgPDwgIiBmcm9tICIgPDwgZm9vLmlkIDw8IGVuZGwgOwoJfQoJCgkvKioqIOODh+OCueODiOODqeOCr+OCvyAqKiovCgl+Rm9vKCkKCXsKCQljb3V0IDw8ICLjg4fjgrnjg4jjg6njgq/jgr8gIiA8PCBpZCA8PCAgZW5kbCA7Cgl9CgkKCS8qKiog44Oh44Oz44OQ6Zai5pWwICoqKi8KCS8qIOS/rumjvuWtkCAqLwoJLyog5oi744KK5YCk44Gu5Z6LICovIAlpbnQKCS8qIOmWouaVsOWQjSAqLyAJCWdldElkCgkvKiDlvJXmlbDjgZPjgZPjgYvjgokgKi8gKAoJLyog5byV5pWw44GT44GT44G+44GnICovICkKCS8qIOODoeODs+ODkOOBuOOBruOCouOCr+OCu+OCuSAqLyBjb25zdCAKCXsKCQlyZXR1cm4gKCBpZCApIDsKCX0KfSA7CgovKiDkv67po77lrZAgKi8KLyog5oi744KK5YCk44Gu5Z6LICovIAljb25zdCBGb28gCi8qIOmWouaVsOWQjSAqLyAJCWZ1bmMxCi8qIOW8leaVsOOBk+OBk+OBi+OCiSAqLyAoCgkvKiAxICovIC8qIOWeiyAqLyAJCWNvbnN0IEZvbwoJCQkvKiDku67lvJXmlbDlkI0gKi8gCWZvbwovKiDlvJXmlbDjgZPjgZPjgb7jgacgKi8gKQp7Cgljb3V0IDw8ICJGb28gZnVuYzEoY29uc3QgRm9vKSAiIDw8IGZvby5nZXRJZCgpIDw8IGVuZGwgOwoJcmV0dXJuICggZm9vICkgOwp9CgovKiDkv67po77lrZAgKi8KLyog5oi744KK5YCk44Gu5Z6LICovIAljb25zdCBGb28gJgovKiDplqLmlbDlkI0gKi8gCQlmdW5jMgovKiDlvJXmlbDjgZPjgZPjgYvjgokgKi8gKAoJLyogMSAqLyAvKiDlnosgKi8gCQljb25zdCBGb28gJgoJCQkvKiDku67lvJXmlbDlkI0gKi8gCWZvbwovKiDlvJXmlbDjgZPjgZPjgb7jgacgKi8gKQp7Cgljb3V0IDw8ICJGb28gJiBmdW5jMihjb25zdCBGb28mKSAiIDw8IGZvby5nZXRJZCgpIDw8IGVuZGwgOwoJcmV0dXJuICggZm9vICkgOwp9CgovKiDkv67po77lrZAgKi8KLyog5oi744KK5YCk44Gu5Z6LICovIAljb25zdCBGb28gKgovKiDplqLmlbDlkI0gKi8gCQlmdW5jMwovKiDlvJXmlbDjgZPjgZPjgYvjgokgKi8gKAoJLyogMSAqLyAvKiDlnosgKi8gCQljb25zdCBGb28gKgoJCQkvKiDku67lvJXmlbDlkI0gKi8gCWZvbwovKiDlvJXmlbDjgZPjgZPjgb7jgacgKi8gKQp7Cgljb3V0IDw8ICJGb28gKiBmdW5jMyhjb25zdCBGb28qKSAiIDw8IGZvby0+Z2V0SWQoKSA8PCBlbmRsIDsKCXJldHVybiAoIGZvbyApIDsKfQoKLyog5L+u6aO+5a2QICovCi8qIOaIu+OCiuWApOOBruWeiyAqLyAJaW50Ci8qIOmWouaVsOWQjSAqLyAJCW1haW4KLyog5byV5pWw44GT44GT44GL44KJICovICgKLyog5byV5pWw44GT44GT44G+44GnICovICkKewoJRm9vIGZvbyA7CglGb28gYmFyID0gZm9vIDsKCUZvbyBiYXogOwoJRm9vIGZvb2JhciAoIGZvbyApIDsKCQoJYmF6ID0gZm9vIDsKCQoJZnVuYzEoIGZvbyApIDsKCWZ1bmMyKCBmb28gKSA7CglmdW5jMyggJmZvbyApIDsKCQoJZnVuYzEoIAoJCWZ1bmMyKCAKCQkJZnVuYzIoIAoJCQkJZnVuYzEoIGZvbyApCgkJCSkKCQkpCgkpIDsKCQoJcmV0dXJuICggMCApIDsKfQ==