구조체structure를 대체하는 클래스Class , public, private, protective

- struct은 기본 멤버의 속성이 public이고


- class는 기본 멤버의 속성이 private이다.

클래스는 구조체를 포함
클래스 = Attribute + Method
Attribute - 멤버 변수
Method - 멤버 함수
그렇다고 하는데 이걸 구별해서 써야 될 필요가 있는지는 모르겠다.
class에 public protective private를 나눠서 쓰면 되는건데

구조체
각각의 변수를 모아서 쓰기 편하게 뭉쳐놓은 것

struct나 typedef는 선언하기 귀찮고 불편한다.

C++에서는 이 부분이 개선된다.

typedef struct Person
{
}Person;
이런식으로 선언해야 되서 귀찮았는데

struct Person
{
};
으로 간단해졌다.

struct Person
{
 int a;
 int b;

 void ShowData(int id); // 함수도 막 넣는다.
};

그럼 구조체가 아닌 클래스Class

Class는 변수가 아닌 객체
객체Object는 현실의 모든 사물, 또는 추상적인 개념으로 구분할 수 있는 한 덩어리를 말한다.
완전한 대상체'라는 의미를 지닌다.

데이터 추상화(Data Abstraction)
사람
 → 멤버 변수 : 이름, 나이, 친구명단, 재산, ...
 → 멤버 함수 : 밥하기, 운전하기 (좀 아닌가..), ...

프로그램에서 한 형태에게 필요로 하는 것을 추가...
도서관에서 사람의 멤버함수라면 ... 대여, 반납, 도서신청 등이 추가될 수 있을듯..

인스턴스화(instantiation)
: 클래스를 기반으로 객체를 생성하는 것

public protective private
public - 공용 : 클래스 밖에서 접근 가능
protective - 상속전에는 private, 상속후에는 public처럼 동작
private - 클래스 안에서만 접근 또는 변경 가능

class Person
{
 int a;
 int b;
void Borrow();
void Return();
void Application();
}

void Person::Borrow() //class의 밖에서 함수를 선언할 때
{
}

inline void Person::Return() //class의 밖에서 내부에 선언하는것처럼 선언
{
}

먼 차인지는 몰겠다.

구조체, 구조체 배열, 구조체 포인터, 공용체, 열거형

구조체 정의
struct point
{
    int x;
    int y;
};

구조체
를 '사용자 정의 자료형'이라 하고
구조체를 이루는 변수를 '구조체 멤버'라고 한다.

struct point
{
  
int x;
   int y;
} p1, p2, p3;

조체 정의와 변수 선언을 동시에 할 수 있음

struct point
{
 int x;
 int y;
};

int
main(void)
{
 struct point p1,
p2, p3;

 return 0;
}
메인함수에서 구조체 변수 선언을 할 수도 있다.

-------------
구조체 초기화 방법들..--------
struct person
{
 char name[20];
 char
phone[20];
 int age;
};

int main(void)
{
 struct person p1={"Free Lec",
"02-3142-6702", 20};
  //배열 초기화 문법을 구조체에 적용
 struct person p2={.age=20, .name="Free Lec",
.phone="3142-6702"};
//구조체 멤버 변수를 지정하여 초기화

 struct person pArray[3];  //구조체를 배열로
선언
 
 printf("이름, 전화번호 순으로 입력: ");  //반복문을 쓰면 한번에 여러개를 입력 가능
 scanf("%s %s", pArray[i].name,
pArray[i].phone);

 struct person * pMan;  // pMan은 구조체를
가리키는 포인터

 return 0;
}

구조체 포인터
struct person * p;

--------------------------
구조체 용도...사용법
구조체도 call by reference ... call by value 의 방법으로 함수에 전달이
가능하고
동일한 구조체 끼리의 연산도 가능하다.
p2=p1;
char *number=p2.phone;


조체가 구조체에 포함되는 것도 가능함, 중첩된 구조체
struct
point

{
 int x;
 int y;
};

struct circle
{
 struct point p;
 double radius;
};

중춥된 구조체의 초기화
struct
circle c = {1, 2, 3.0 };
struct circle c = { {1, 2}, 3.0};
두 가지
형태 모두 가능
struct circle c={1, 2} << point p의 요소는 x=1, y=2로..
radius는 default인 0으로 초기화
struct circle c={ {1}, 2} << point p의
x=1, y는 default인 0으로, radius=2.0 으로 초기화

---------------typedef를
이용한 구조체 정의 쉽게 만들기---------------------
typedef 는 이미 존재하는 자료형에 이름을 붙이기
위한 용도로 사용된다.

#include <stdio.h>
struct Data
{
 
int data1;
  int data2;
};

typedef
struct Data Data;

int main(void)
{
 Data d={1,2};
 printf("%d, %d,
\n", d.data1, d.data2);

  return 0;
}
-----------
typedef struct Data
{
  int
data1;
  int data2;
} Data;


용체-----------
구조체와 비슷한데 약간 다른점..
: 멤버 중 가장 메모리를 많이 요구하는 멤버에 초점을
맞춰서 메모리를 할당한다.
구조체와는다르게 개별적으로 메모리를 할당받지 않고 통합적으로 한개의 메모리를 할당받는다.

시에 여러개가 저장되지 못한다.
--하드웨어 프로그래밍 시 많이 사용된다고 한다.

union data
{
int
d1;
double d2;
char d3;
};
열혈강의 523p

열거형
-------------------------선언방법 및 사용 527p
enum color {RED=1, GREEN=3,
BLUE=5};
숫자를 지정해주면 그 숫자가 입력

enum color {RED, GREEN=100, BLUE};

렇게 선언하면
RED=0, GREEN=100, BLUE=101으로 선언

#include
<stdio.h>

enum days {MON, TUE, WED, THU, FRI, SAT, SUN} //
숫자를 지정하지 않으면 순서대로 입력

int main(void)
{
  enum days day;
 
printf("Input a day(0:Monday~6:Sunday) : ");
  scand("%d",&day);
 
switch (day)
  {
  case MON :
     printf("수영을 하세요.\n");
    
break;
  case TUE :
      printf("조깅을 하세요.\n");
      break;
 
case......
...............
...
  }
  return 0;
}


행결과
Input a day(0:Monday ~ 6:Sunday) : 1(ENTER)
수영을 하세요.