학습목표    1

학습주제    1

예습내용    1

실습방법    1

        1

중요함수    1

클래스 생성자 소멸자

학습목표

생성자와 소멸자에 대해서 알아 본다.

학습주제

1.       생성자와 소멸자의 선언 방법

2.       생성자와 소멸자의 사용

예습내용

생성자

클래스와 동일한 이름으로 클래스 속에 정의되는 멤버함수로 클래스가 객체로 선언 자동으로 호출되어 실행 된다.

객체가 선언될 멤버 변수의 초기화, 동적 메모리 할당 등에 사용한다.

소멸자

생성자와 반대로 객체의 사용이 끝날 자동 호출, 실행 된다. 클래스와 같은 이름 앞에 “~” 붙인다.

동적으로 할당된 메모리를 객체의 소멸과 함께 해제 시킬 사용한다.

실습방법

   

다음 예제1 생성자에서 메모리를 할당하고 데이터를 읽어온다. 연산과 출력을 후에는 소멸자에서 메모리를 free시키고 프로그램을 종료 한다. 이렇게 하면 프로그램 하는 사람은 메모리의 할당과 소멸이 지동으로 됨으로 효율적으로 프로그램 있다.

예제1: 클래스 생성자, 소멸자의 사용

생성자와 소멸자의 선언과 사용방법을 공부한다.

#include "stdafx.h"

#include <stdio.h>

#include <malloc.h>

 

typedef struct list Man;

 

struct list{                            //(1)구조체의 선언

              int kor;

              int eng;

              int sum;

              float ave;

};

 

class grade{                         //(2)클래스의 선언

              public:

                             Man *init; //(3)구조체의 시작 번지를 전역 변수로 저장

                             int nTotalStudent;    // 전체 학생

                             grade();

                             ~grade();

                             void Calculate();

                             void Output();

};

 

grade::grade()                       //(4) 생성자

{

              int i;

              Man *a;

              FILE *fp;

 

              fp=fopen("input.txt","r");

              fscanf(fp,"%d",&nTotalStudent);

              init = (Man *)malloc(sizeof(Man)*nTotalStudent);   //(5) 데이타 메모리 할당

              a = init;

              for(i=0;i<nTotalStudent;i++) {

                             fscanf(fp,"%d %d",&a->kor,&a->eng);

                             a++;

              }

              fclose(fp);

}

 

grade::~grade()       //(6) 소멸자

{

              free(init);  //(7) malloc으로 잡은 메모리를 돌려 준다.

}

 

void grade::Calculate()                         //(8) 연산부

{

              int i;

              Man *a;

             

              a = init;

              for(i=0;i<nTotalStudent;i++) {

                             a->sum=a->kor+a->eng;

                             a->ave=(float)a->sum/2.;

                             a++;

              }

}

 

void grade::Output()                             //(9) 출력부

{

              int i;

              Man *a;

 

              a = init;

              for(i=0;i<nTotalStudent;i++) {

                             printf("%d+%d=%d 평균:%f\n",a->kor,a->eng,a->sum,a->ave);

                             a++;

              }

}

 

void main(void)

{

              grade g;

 

              g.Calculate();

              g.Output();

}

a=1 b=2 c=3

 

처음

   

 

중요함수