2008. 8. 21. 15:57

c++ , 생성자 / 소멸자

#include <iostream>
using std::cout;
using std::endl;
using std::cin;
 
//  ******* class 선언******
class T
{
public:
 T();
 T(int a);
 T(int a, double b, char c);
 T(char c);
 T(char *p);
 T(int a, int b, char *p);
};
//  ******* class 멤버함수 외부 정의******
T::T()
{
 cout<<"생성자"<<endl;
}
T::T(int a)
{
 cout<<a<<"생성자"<<endl;
}
T::T(int a, double b, char c)
{
 cout<<a<<' '<<b<<' '<<c<<"생성자"<<endl;
}
T::T(char c)
{
 cout<<c<<"생성자"<<endl;
}
T::T(char *p)
{
 cout<<p<<"생성자"<<endl;
}
T::T(int a, int b, char *p)
{
 cout<<a<<' ' <<b<<' '<<p<<"생성자"<<endl;
}
int main()
{
    T ob, ob2, ob3;   //객체 생성
    T ob4(100);       //객체 생성 시 인수전달
    T ob5(10, 20.34, 'B');
    T ob6('a');
    T ob7;
    T ob8("Hello");
    T ob9(50, 60, "Happy Birthday");
    return 0;
}


/***********************************
    ACC클래스를 다음과 같이 수정해보자.
    - 멤버 변수를 private으로 변경한 후,
 생성자를 추가하여 변수를 초기화 하여라.
************************************/
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
 
class ACC
{
private:
    int accId;              //계좌번호
    char pw[5];             //비밀번호
    char name[20];          //이름
    int bal;                //잔액
public:     
 ACC(int ac, char *pW, char *pN ,int money);
    void deposit();         //입금
    void withdraw();        //출금
    void showData();        //잔액조회
};     
 
///////////////////////////////////////////main
int main()
{
    //ACC ac = {1111, "1234", "김수현", 5000}; //객체 생성 후, 초기화
    ACC ac(1111, "1234", "김수현", 5000); //객체 생성 후, 초기화
    ac.showData();  //잔액조회
    ac.deposit();   //입금
    ac.withdraw();  //출금
    ac.showData();  //잔액조회
   
    return 0;
}
 
///////////////////////////////////////////ACC 멤버함수 외부정의
ACC::ACC(int ac, char *pW, char *pN ,int money)
{
 accId =ac;
 strcpy(pw,pW);
 strcpy(name,pN);
 bal=money;
 cout<<"생성자"<<endl;
}

void ACC::deposit()
{
    int m;
   
    cout << "\n입금금액 입력 : ";
    cin >> m;
   
    bal += m;
   
    cout << "\t\t" << m << "원 입금완료~!!\n";
}
 
void ACC::withdraw()
{
    int m;
   
    cout << "\n출금금액 입력 : ";
    cin >> m;
   
    bal -= m;
   
    cout << "\t\t" << m << "원 출금완료~!!\n";
}
 
void ACC::showData()
{
    cout << "\n계좌번호 : " << accId << endl;
    cout << name << "회원님의 잔액은 " << bal << "입니다.\n";
}

-------------------------------------------------------------------------
**********************     Triangle.h


//헤더의 중복을 방지하기 위한 구문
//만약에 _TRIANGLE_H_가 정의 되지 않았다면 #endif까지 수행 아니라면 #endif로 점프
#ifndef _TRIANGLE_H_
// 정의 _TRIANGLE_H_
#define _TRIANGLE_H_
class Triangle
{
private:
 int b,h;
public:
 Triangle(int _b, int _h);
 double GetArea();
};
#endif

********************         Triangle.cpp
#include<iostream>
#include"Triangle.h"

using std::endl;
using std::cout;

//Triangle::Triangle(int _b, int _h)
//생성자에서만 가능한 초기화 방법 -> 콜론(:)을 이용한 초기화
Triangle::Triangle(int _b, int _h):b(_b),h(_h)
{
 /*
 b=_b;
 h=_h;
 */
 cout<<"생성자"<<endl;
}
double Triangle::GetArea()
{
 return (b+h)/2.0;
}

****************************     main.cpp

#include <iostream>
#include"Triangle.h"
using std::cout;
using std::cin;
using std::endl; 
 
/*
    아래와 같은 Triangle클래스를 디자인해보자.
    1. Triangle클래스 디자인
       ▶ private 멤버변수
          밑변, 높이
       ▶ public 멤버함수
          생성자 - 멤버변수 초기화
          GetArea - 삼각형 넓이 리턴
      
    2. 파일분할하여 프로그램을 작성해보자.   
*/


int main()
{
    int base, height;
    cout << "\n *** 삼각형 넓이 구하기 ***\n\n";
    cout << "밑변 : ";
    cin >> base;
    cout << "높이 : ";
    cin >> height;
 
    Triangle tri(base, height); //객체 생성 시 인수 전달
                                //삼각형 넓이 리턴
    cout << "삼각형의 넓이는 " << tri.GetArea() << "입니다.\n";
    return 0;
}