매니저/C++

C++ 2011.10.01 (미검사)

cdprkr2077 2011. 10. 13. 00:11

#include<iostream.h>

 


template <class dt, class dt2>  // template함수 swap

void swap(dt &x, dt2 &y)
{
 dt temp = x;
 x = y;
 y = temp;
}

void main ( )
{
 int a = 10, b = 20;
 swap<int> (a, b);
 cout << a << ", " << b << endl;  // 20, 10

 long c = 30, d = 40;
 swap<long> (c, d);
 cout << c << ", " << d << endl;  // 40, 30

 swap (a, c);
}


/*
template <class dt>     // template함수 swap

void swap(dt &x, dt &y)
{
 dt temp = x;
 x = y;
 y = temp;
}

void main ( )
{
 int a = 10, b = 20;
 swap<int> (a, b);
 cout << a << ", " << b << endl;  // 20, 10

 long c = 30, d = 40;
 swap<long> (c, d);
 cout << c << ", " << d << endl;  // 40, 30
}
*/

 

/*
void swap(int &x, int &y)
{
 int temp = x;
 x = y;
 y = temp;
}

void swap(long &x, long &y)
{
 long temp = x;
 x = y;
 y = temp;
}

void main ( )
{
 int a = 10, b = 20;
 swap(a,b);
 cout << a << ", " << b << endl;  // 20, 10

 long c = 30, d = 40;
 swap(c,d);
 cout << c << ", " << d << endl;  // 40, 30
}
*/


/*
class nike
{
 int nai;
 int ki;
public :
 nike(int x, int y)
 {
  nai = x, ki = y;
 }
 friend ostream & operator << ( ostream &out, nike temp);
 friend istream & operator >> ( istream &in, nike &temp);
};

ostream &operator << ( ostream &out, nike temp)
{
 out << temp.nai << ", " << temp.ki;
 return out;
}

istream &operator >> (istream &in , nike &temp)
{
 cout << "나이 입력 : ";
 in >> temp.nai;
 cout << "키 입력 : ";
 in >> temp.ki;
 return in;
}

void main ( )
{
 nike ob(10,20);
 cout << ob << endl;   // 10, 20
 cin >> ob;
 cout << ob << endl;   // 입력된 값이 출력된다.
}
*/

/*
class nike
{
 int nai;
 int ki;
public :
 nike(int x, int y)
 {
  nai = x, ki = y;
 }
 friend ostream & operator << ( ostream & out, nike temp);
};

ostream & operator << ( ostream & out, nike temp)
{
 out << temp.nai << ", " << temp.ki;
 return out;
}

void main ( )
{
 nike ob(10,20);
 cout << ob << endl;   // 10, 20
}
*/

/*
class A
{
 int *ip;
public : A( )
   {
    cout << "A의 생성자!" << endl;
     ip = new int;
   }
   ~A( )
   {
    cout << "A의 소멸자!" << endl;
    delete ip;
   }
};

class B : virtual public A   // 가상베이스 클래스
{
public : B( ) { cout << "B의 생성자!" << endl; }
   ~B( ) { cout << "B의 소멸자!" << endl; }
};

class C : virtual public A   // 가상베이스 클래스
{
public : C( ) { cout << "C의 생성자!" << endl; }
   ~C( ) { cout << "C의 소멸자!" << endl; }
};
class D : public B, public C
{
public : D( ) { cout << "D의 생성자!" << endl; }
   ~D( ) { cout << "D의 소멸자!" << endl; }
};

void main ( )
{
 D ob;
}
*/

/*
class A
{
 int *ip;
public : A( ) { cout << "A의 생성자!" << endl; }
   ~A( ) { cout << "A의 소멸자!" << endl;}
};

class B : public A
{
public : B( ) { cout << "B의 생성자!" << endl; }
   ~B( ) { cout << "B의 소멸자!" << endl; }
};

class C :public A
{
public : C( ) { cout << "C의 생성자!" << endl; }
   ~C( ) { cout << "C의 소멸자!" << endl; }
};
class D : public B, public C
{
public : D( ) { cout << "D의 생성자!" << endl; }
   ~D( ) { cout << "D의 소멸자!" << endl; }
};

void main ( )
{
 D ob;
}
*/

 

/*
class A
{
protected :
 int ma;
public :
 A( int x )
 {
  ma = x;
  cout << "난 A의 생성자!" << endl;
 }
 ~A( ) { cout << "난 A의 소멸자!" << endl; }
 void printA( ) { cout << "ma = " << &ma << endl; }
 virtual void out( ) { cout << "난 A의 out( )" << endl; }
 virtual void pp( ) = 0;     // 순수 가상함수
};

class B : public A
{
protected :
 int mb;
public :
 B( int x , int y ) : A(x)    // 매개변수를 받아오는 생성자
 {
  mb = y;
  cout << "난 B의 생성자!" << endl;
 }
 ~B( ) { cout << "난 B의 소멸자!" << endl; }
 void printB( ) { cout << "mb = " << &mb << endl; }
 virtual void out( ) { cout << "난 B의 out( )" << endl; }
};

class C : public B // A와 B를 다중상속 받는 자식 클래스 C
{
 int mc;
public :
 C( int x, int y, int z ) : B(x,y), mc(z)
 {
  mc = z;
  cout << "난 C의 생성자!" << endl;
 }
 ~C( ) { cout << "난 C의 소멸자!" << endl; }
 void printC( ) { cout << "ma = " << ma << ", mb = " << mb << ", mc = " << mc << endl; }
 void out( ) { cout << "난 C의 out( )" << endl; }
 void pp( ) { cout << "난 pp( )다!" << endl; }  // 순수 가상함수의 정의
};

void main ( )
{
 C ob(10,20,30);
 ob.printA( );
 ob.printB( );
 ob.printC( );

 cout << "sizeof(ob) = " << sizeof(ob) << ", &ob = " << &ob << endl;

 ob.out( );   // C의 out( )이 나온다.
 ob.A::out( );  // A이 out( )이 나온다.
 ob.B::out( );  // B이 out( )이 나온다.
 
 C *cp = &ob;
 cp->out( );   // C의 out( )이 나온다.
 cp->A::out( );  // A의 out( )이 나온다.
 cp->B::out( );  // B의 out( )이 나온다.

 A *ap = &ob;  // 부모 클래스형 포인터는 자식형 객체의 주소 보관 가능
 B *bp = &ob;  // 부모 클래스형 포인터는 자식형 객체의 주소 보관 가능

 cout << "&ob = " << &ob << ", ap = " << ap << ", bp = " << bp << endl;

 A &ar = ob;   // 부모클래스형 레퍼런스는 자식형 객체의 별명이 될 수 있다.
 B &br = ob;   // 부모클래스형 레퍼런스는 자식형 객체의 별명이 될 수 있다.
 ar.out( );   // A의 out( ), out( )이 가상함수라면 C의 out( )
 br.out( );   // B의 out( ), out( )이 가상함수라면 C의 out( )
}
*/

/*
class A
{
protected :
 int ma;
public :
 A( int x )
 {
  ma = x;
  cout << "난 A의 생성자!" << endl;
 }
 ~A( ) { cout << "난 A의 소멸자!" << endl; }
 void printA( ) { cout << "ma = " << &ma << endl; }
 virtual void out( ) { cout << "난 A의 out( )" << endl; }
 virtual void pp( ) = 0;   // 순수 가상함수
};

class B
{
protected :
 int mb;
public :
 B( int y )    // 매개변수를 받아오는 생성자
 {
  mb = y;
  cout << "난 B의 생성자!" << endl;
 }
 ~B( ) { cout << "난 B의 소멸자!" << endl; }
 void printB( ) { cout << "mb = " << &mb << endl; }
 virtual void out( ) { cout << "난 B의 out( )" << endl; }
};

class C : public A, public B // A와 B를 다중상속 받는 자식 클래스 C
{
 int mc;
public :
 C( int x, int y, int z ) : A(x), B(y), mc(z)
 {
  mc = z;
  cout << "난 C의 생성자!" << endl;
 }
 ~C( ) { cout << "난 C의 소멸자!" << endl; }
 void printC( ) { cout << "ma = " << ma << ", mb = " << mb << ", mc = " << mc << endl; }
 void out( ) { cout << "난 C의 out( )" << endl; }
 void pp( ) { cout << "난 pp( )다!" << endl; }  // 순수 가상함수의 정의
};

void main ( )
{
 C ob(10,20,30);
 ob.printA( );
 ob.printB( );
 ob.printC( );

 cout << "sizeof(ob) = " << sizeof(ob) << ", &ob = " << &ob << endl;

 ob.out( );   // C의 out( )이 나온다.
 ob.A::out( );  // A이 out( )이 나온다.
 ob.B::out( );  // B이 out( )이 나온다.
 
 C *cp = &ob;
 cp->out( );   // C의 out( )이 나온다.
 cp->A::out( );  // A의 out( )이 나온다.
 cp->B::out( );  // B의 out( )이 나온다.

 A *ap = &ob;  // 부모 클래스형 포인터는 자식형 객체의 주소 보관 가능
 B *bp = &ob;  // 부모 클래스형 포인터는 자식형 객체의 주소 보관 가능

 cout << "&ob = " << &ob << ", ap = " << ap << ", bp = " << bp << endl;

 A &ar = ob;   // 부모클래스형 레퍼런스는 자식형 객체의 별명이 될 수 있다.
 B &br = ob;   // 부모클래스형 레퍼런스는 자식형 객체의 별명이 될 수 있다.
 ar.out( );   // A의 out( ), out( )이 가상함수라면 C의 out( )
 br.out( );   // B의 out( ), out( )이 가상함수라면 C의 out( )
}
*/

/*
class A
{
protected :
 int ma;
public :
 A( int x )
 {
  ma = x;
  cout << "난 A의 생성자!" << endl;
 }
 ~A( ) { cout << "난 A의 소멸자!" << endl; }
 void printA( ) { cout << "ma = " << &ma << endl; }
 void out( ) { cout << "난 A의 out( )" << endl; }
};

class B
{
protected :
 int mb;
public :
 B( int y )    // 매개변수를 받아오는 생성자
 {
  mb = y;
  cout << "난 B의 생성자!" << endl;
 }
 ~B( ) { cout << "난 B의 소멸자!" << endl; }
 void printB( ) { cout << "mb = " << &mb << endl; }
 void out( ) { cout << "난 B의 out( )" << endl; }
};

class C : public A, public B // A와 B를 다중상속 받는 자식 클래스 C
{
 int mc;
public :
 C( int x, int y, int z ) : A(x), B(y), mc(z)
 {
  mc = z;
  cout << "난 C의 생성자!" << endl;
 }
 ~C( ) { cout << "난 C의 소멸자!" << endl; }
 void printC( ) { cout << "ma = " << ma << ", mb = " << mb << ", mc = " << mc << endl; }
 void out( ) { cout << "난 C의 out( )" << endl; }
};

void main ( )
{
 C ob(10,20,30);
 ob.printA( );
 ob.printB( );
 ob.printC( );

 cout << "sizeof(ob) = " << sizeof(ob) << ", &ob = " << &ob << endl;

 ob.out( );   // C의 out( )이 나온다.
 ob.A::out( );  // A이 out( )이 나온다.
 ob.B::out( );  // B이 out( )이 나온다.
 
 C *cp = &ob;
 cp->out( );   // C의 out( )이 나온다.
 cp->A::out( );  // A의 out( )이 나온다.
 cp->B::out( );  // B의 out( )이 나온다.

 A *ap = &ob;  // 부모 클래스형 포인터는 자식형 객체의 주소 보관 가능
 B *bp = &ob;  // 부모 클래스형 포인터는 자식형 객체의 주소 보관 가능

 cout << "&ob = " << &ob << ", ap = " << ap << ", bp = " << bp << endl;

 A &ar = ob;   // 부모클래스형 레퍼런스는 자식형 객체의 별명이 될 수 있다.
 B &br = ob;   // 부모클래스형 레퍼런스는 자식형 객체의 별명이 될 수 있다.
 ar.out( );   // A의 out( )
 br.out( );   // B의 out( )
}
*/

/*
class A
{
protected :
 int ma;
public :
 A( int x )
 {
  ma = x;
  cout << "난 A의 생성자!" << endl;
 }
 ~A( ) { cout << "난 A의 소멸자!" << endl; }
 void printA( ) { cout << "ma = " << &ma << endl; }
};

class B
{
protected :
 int mb;
public :
 B( int y )    // 매개변수를 받아오는 생성자
 {
  mb = y;
  cout << "난 B의 생성자!" << endl;
 }
 ~B( ) { cout << "난 B의 소멸자!" << endl; }
 void printB( ) { cout << "mb = " << &mb << endl; }
};

class C : public A, public B // A와 B를 다중상속 받는 자식 클래스 C
{
 int mc;
public :
 C( int x, int y, int z ) : A(x), B(y), mc(z)
 {
  mc = z;
  cout << "난 C의 생성자!" << endl;
 }
 ~C( ) { cout << "난 C의 소멸자!" << endl; }
 void printC( ) { cout << "ma = " << ma << ", mb = " << mb << ", mc = " << mc << endl; }
};

void main ( )
{
 C ob(10,20,30);
 ob.printA( );
 ob.printB( );
 ob.printC( );

 cout << "sizeof(ob) = " << sizeof(ob) << ", &ob = " << &ob << endl;
}
*/


/*
class A
{
 int ma;
public :
 void printA( ) { cout << "ma = " << &ma << endl; }
};

class B
{
 int mb;
public :
 void printB( ) { cout << "mb = " << &mb << endl; }
};

class C : public A, public B // A와 B를 다중상속 받는 자식 클래스 C
{
 int mc;
public :
 void printC( ) { cout << "mc = " << &mc << endl; }
};

void main ( )
{
 C ob;
 ob.printA( );
 ob.printB( );
 ob.printC( );

 cout << "sizeof(ob) = " << sizeof(ob) << ", &ob = " << &ob << endl;
}
*/

/*
class A
{
 int ma;
public :
 void printA() { cout << "ma = " << ma << endl; }
};

class B
{
 int mb;
public :
 void printB() { cout << "mb = " << mb << endl; }
};

class C : class A, class B // A와 B를 다중상속 받는 자식 클래스 C
{
 int mc;
public :
 void printC() { cout << "mc = " << mc << endl; }
};

void main ()
{
 C ob;
 ob.printA();
 ob.printB();
 ob.printC();

 cout << "sizeof(ob) = " << sizeof(ob) << endl;
}
*/