학습목표    1

학습주제    1

예습내용    1

실습방법    1

        1

중요함수    1

객체와 클래스

학습목표

클래스를 사용하는 이유와 방법을 배운다.

학습주제

1.       클래스의 정의

2.       클래스 멤버의 참조

3.       클래스 함수의 사용

4.       private 멤버의 입력과 참조

예습내용

우리가 프로그램으로 구현하려는 것의 하나하나를 객체라 한다. 객체는 클래스로 구성하고, 클래스는 변수(mamber) 함수(method)들을 묶어서 구성한다. 이를 다른 클래스에서 참조(public) 수도 있게 하고 그렇지 않게(private) 수도 있다.

실습방법

   

1. 클래스의 정의

 

class 클래스명{

              private:

                            멤버변수;

                            멤버함수;

              public:

                            멤버변수;

                            멤버함수;

};

클래스명 객체변수;

 

 

 

 

 

 

 

 

 

 

public으로 선언한 것은 다른 클래스에서 참조할 있으나 private 선언한 것은 자기 클래스에서 밖에 참조 없다. 만약 이를 참조하는 방법은 뒤에 설명 하겠다.(public 함수를 통해 참조)

아래 예제에서 변수 c public으로 선언되어 있어서 (1) 같이 입력하면 된다. 그러나 privale 선언한 a,b 같은 방법으로 하면 오류가 발생한다. 이는 (3) 같이 public 함수를 통해 입력해야 한다.

예제1: 클래스의 선언과 사용

클래스의 선언과 public, private 멤버의 입출력을 공부한다.

#include "stdafx.h"

#include "iostream.h"

 

class sample {

              private :

                             int a;

                             int b;

              public :

                             int c;

                             void pr();

                             void input(int x, int y);

             

};

 

void sample::pr()

{

              cout<<"a="<<a<<" b="<<b<<" c="<<c<<endl;

}

 

void sample::input(int x, int y)

{

              a=x;

              b=y;

}

 

int main(int argc, char* argv[])

{

              sample test;

 

              test.c=3; // (1) public 멤버의 입력

              // test.a=1; test.b=2; 같이 입력하면 error 발생한다. (2)

              test.input(1,2);        // (3) a,b prevate이므로 내부 함수를 이용해 입력

              test.pr();

              return 0;

}

a=1 b=2 c=3

 

처음

   

앞에 구조체에서 성적 프로그램을 클래스를 이용하여 작성해 보자.

성적을 클래스의 멤버 함수(Input, Calculate, Ouput) 처리했다.

입력부에서는 (5)에서와 같이 전체 학생수를 읽고 메로리를 할당한 후에 (7)에서 메모리를 free 시키는 동적으로 메모리를 할당하는 프로그램을 만들었다.

과제1: 클래스를 이용한 성적 프로그램에서 수학(math) 추가하고 학생 수를 10명으로 하여 아래 프로그램을 수정하시오.

“input.txt” 아래와 같다.

5

10 20

30 40

50 60

70 80

90 100

#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;    // 전체 학생

                             void Input();

                             void Calculate();

                             void Output();

};

 

void grade::Input()                 //(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);

}

 

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

{

              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()                             //(7) 출력부

{

              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.Input();

              g.Calculate();

              g.Output();

 

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

}

10+20=30 평균:15.000000

30+40=70 평균:35.000000

50+60=110 평균:55.000000

70+80=150 평균:75.000000

90+100=190 평균:95.000000

중요함수