☆ 구조체와 동적 메모리 할당 예제
#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;
}
---
'기반지식 > C/C++' 카테고리의 다른 글
중앙정보학원 C/C++/OOP 강좌 15일차 - 2010년 6월 29일 (0) | 2010.06.30 |
---|---|
중앙정보학원 C/C++/OOP 강좌 14일차 - 2010년 6월 28일 (0) | 2010.06.28 |
중앙정보학원 C/C++/OOP 강좌 12일차 - 2010년 6월 24일 (0) | 2010.06.24 |
중앙정보학원 C/C++/OOP 강좌 11일차 - 2010년 6월 23일 (0) | 2010.06.23 |
중앙정보학원 C/C++/OOP 강좌 9일차 - 2010년 6월 21일 (0) | 2010.06.22 |