☆ 구조체와 동적 메모리 할당 예제

#include <stdio.h>
#include <malloc.h>

typedef struct Student
{
int no;
char name[10];
int age;

}ST;

void datain(ST *st,int n) // <-- 이 부분 잘 모르겠음... 
{
for(int i=0;i<n;i++,st++)
{
printf("%d번 학생정보 입력\n",i+1);
printf("\t번호 : ");

scanf("%d",&st->no);

printf("\t이름 : ");
scanf("%s",&st->name);

printf("\t나이 : ");
scanf("%d",&st->age);

}
}

void dataout(ST *st, int n)
{
puts("=== 입력결과 출력 ===");
printf("번호\t이름\t나이\n");
for(int i=0;i<n;i++,st++)
{
printf("%-5d%-10s%6d\n",st->no,st->name,st->age);
}
}

void main()
{
int inwon;
ST *st;
printf("입력할 인원수는?");
scanf("%d",&inwon);
st=(ST *)malloc(sizeof(ST)*inwon);

datain(st,inwon);
dataout(st,inwon);

free(st);  // 동적 메모리 해제
}

  - 자료 수를 입력받아 정하고, 그에 맞게 동적 메모리를 할당하여 자료를 입력받고 결과를 출력한다.


☆ 클래스와 접근 지정자

#include <iostream.h>

class Point            // C의 구조체(struct)와 거의 같으나 기본 접근지정자가 private이다.
{

//public:     // <- public으로 할 것이라면 구조체를 쓰는 것과 차이가 없다. (굳이 class를 쓸 필요가 없음)
private:  // <- 안 써줘도 어차피 public임 ㅋㅋ

int x;
int y;

public:       // class 전체는 private이지만 이렇게 필요한 함수 영역에만 public을 지정해 
             // 외부에서 값을 참조할 수 있다.

void SetX(int xx);
void SetY(int yy);

int GetX(); // 아래의 리턴 타입이 int이므로 함수도 int로 선언
{
return x;   // <-- x의 리턴 타입이 int
}

int GetY()
{
return y;
}
};

void Point :: SetX(int xx)
{
x=xx;
}

void Point :: SetY(int yy)
{
y=yy;
}

int Point :: GetX()
{
return x;
}

int Point :: GetY()
{
return y;
}


void main()
{
Point p;

p.SetX(100); 
p.SetY(200);

cout << "X 좌표 : " << p.GetX() << endl;
cout << "Y 좌표 : " << p.GetY() << endl;

p.x=100;  // 이런 식의 직접 접근은 private에서는 불가능
p.y=80;
cout << "X좌표 : " << p.x << endl;
cout << "Y좌표 : " << p.y << endl;

}

  - class는 보통 프로그램 자체에 포함시키지 않고 헤더 파일로 뺀다.
  - 이 경우 #include "파일이름.h"와 같이 인클루드시킨다. (<파일이름.h>가 아님!)
  - class 내부에서 함수가 정의될 경우, 이것 역시 선언만 시키고 class 외부에서 정의할 수 있다.


☆ 클래스와 멤버함수 예제

#include <iostream.h>
#include <string.h>

class Person
{

private:

char name[10];
int kor, eng;

public:
void setName(char *n);
void setScore(int k, int e);
char *getName();  // <-- 요 부분 몰랐음...
int getKor();
int getEng();
int getTot();
};

void Person :: setName(char *n)
{
strcpy(name,n);  // <-- 요 부분도 몰랐음
}

void Person :: setScore(int k, int e)
{
kor = k;
eng = e;
}

char *Person :: getName()   // <-- 문자열을 받는 함수는 기본적으로 포인터로 취급한다고 생각하자.
{
return name;
}

int Person :: getKor()
{
return kor;
}

int Person :: getEng()
{
return eng;
}

int Person :: getTot()
{
return kor + eng;
}


void main()
{
Person p;
p.setName("이수진");
p.setScore(90,100);

cout << "이름 : " << p.getName() << endl;
cout << "국어 : " << p.getKor() << endl;
cout << "영어 : " << p.getEng() << endl;
cout << "총점 : " << p.getTot() << endl;
}

---

+ Recent posts