5. 논리적 자료표현 : 구조체.

Slides:



Advertisements
Similar presentations
3. 자료형. 담당교수 : 이 성 우 C++ 프로그래밍 상수와 변수 (3) 1. 변수 (variable)  프로그램 수행 도중에 자료  변수를 위해 은 변하지 않음  선언 시에 반드시 그. ※ 저장 정보의 구성 ① 정보의 종류 ② 저장 값 ③ 저장 위치 int Num.
Advertisements

윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 01. C 언어 기반의 C++ 1.
3. C++와 객체지향 C++ 코딩 방법 객체 단위로 2 개의 파일 인터페이스 파일 구현파일
명품 C++ 프로그래밍 3장. 클래스와 객체.
명품 C++ 8장 상속.
명품 C++ 4장. 객체 포인터와 객체 배열, 객체의 동적 생성.
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제1장 기초 사항.
C++ Espresso 제2장 제어문과 함수.
강좌명 : C++프로그래밍 (C++ Programming)
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제6장 객체배열과 벡터 객체 배열을 이해한다. 벡터(vector) 클래스를 사용할 수 있다.
명품 C++ 13장 예외 처리와 C 언어와의 링크 지정.
C++ Exspresso 제5장 클래스의 기초.
8. 객체와 클래스 (기본).
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C 11장. 포인터의 활용 #include <stdio.h> int main(void) { int num;
C++ Espresso 제9장 다형성.
10장 템플릿과 표준 템플릿 라이브러리(STL)
명품 C++ 8장 상속.
C++ Espresso 제6장 생성자와 소멸자.
C 9장. 구조체 #include <stdio.h> int main(void) { int num;
7장 클래스.
명품 C++ 7장 프렌드와 연산자 중복.
18장. 헤더 파일과 구현 파일 01_ 헤더 파일과 구현 파일의 사용.
14장. 함수 1 01_ 함수의 기본 02_ 인자의 전달.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C++ Programming: Sample Programs
C ++ 프로그래밍 시작.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
Chapter 1 C++ 기초 Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
C++ Programming: chapter 7 – inheritence
스택(Stack) 김진수
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
14. 예외처리.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
13. 연산자 오버로딩.
Chapter 3 클래스. 최호성.
제5장 생성자와 접근제어 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 11. 1차원 배열.
타입, 연산자 Chapter 5, 6 Kum Deuk Kyu , Ph. D. Spring 2015
가상함수와 추상 클래스.
Chapter 1 C와는 다른 C++. 최호성.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
4장 자료형.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 22. 구조체와 사용자 정의 자료형1.
루프와 카운트 Looping and counting
멤버 함수인 operator+()가 실행, 또는 전역 함수인 operator+()가 실행 Point p3 = p1+p2; 에서
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
C-언어와 기반구조 정보보호학과 이정수 교수.
18장. 다차원 배열 그리고 포인터.
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
3장,4장 발표 서정우.
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
C++ Espresso 제13장 입출력과 파일처리.
포인터와 배열 조 병 규 한 국 교 통 대 학 교 SQ Lab..
Ch16_표준 템플릿 라이브러리.
컴퓨터 프로그램은 여러 기능의 복합체이다. 라이브러리 함수와 사용자 정의 함수
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
자료구조 세미나 발표 주제: 자료구조 기초 - 1회 차: 자료구조의 정의, 기초 지식 (함수, 포인터, 레퍼런스)
10장 템플릿과 표준 템플릿 라이브러리(STL)
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
Chapter 14. 템플릿(Template) 2
17장. 포인터의 포인터.
개정판 누구나 즐기는 C언어 콘서트 제11장 구조체, 공용체, 열거형 출처: pixabay.
Presentation transcript:

5. 논리적 자료표현 : 구조체

차 례 구조체 구조체 배열과 포인터

구조체 구조체 자료의 논리적 표현 단위 사용자가 필요에 의해 여러 자료를 하나의 자료형으로 정의 데이터 베이스의 레코드 형식을 하나의 자료형으로 정의

구조체 정의 구조체 태그 : 구조체 식별자, 생략 가능함 구조체 멤버 : 구조체를 구성하는 항목 구조체  하나의 자료형!! //구조체 선언하여 변수 선언하기1 struct [태그이름] { 구조체 멤버 선언; }; struct [태그 이름] 변수이름1, 변수이름2; //구조체 선언하여 변수 선언하기2 struct [태그이름] { 구조체 멤버 선언; } 변수이름1, 변수이름2;

//일반 변수를 사용한 예 char Name[30]=""; char MPhoneNum[20]=""; //구조체를 정의해서 사용한 예 (태그명이 생략된 예) struct { char Name[30]; char MPhoneNum[20]; } friend; //구조체를 정의해서 사용한 예 (태그명을 사용한 예) struct FriendInfo { char Name[30]; char MPhoneNum[20]; }; FriendInfo friend;

strcpy_s(Name, 30, “김갑돌”); 구조체형 변수의 멤버 사용 – 구조체 멤버 참조 연산자(.)를 사용함 선언한 변수 : Name, MPhoneNum 선언한 변수 : friend 일반 변수는 변수이름 그대로 사용 : strcpy_s(Name, 30, “김갑돌”); 구조체형 변수의 멤버 사용 – 구조체 멤버 참조 연산자(.)를 사용함 strcpy_s(friend.Name, 30, “김갑순”);

소스 5-4 (ch05_02.cpp) struct { char Name[30]; char MPhoneNum[20]; } Friend, Friend1; strcpy_s(Friend.Name, 30, "김갑돌"); strcpy_s(Friend.MPhoneNum, 20, "010-8741-0000"); Friend1=Friend; cout << Friend.Name << endl; cout << Friend.MPhoneNum << endl; cout << Friend1.Name << endl; cout << Friend1.MPhoneNum << endl;

구조체를 구조체 멤버로 구조체 멤버에 또 다른 구조체형 변수가 멤버로 사용이 가능함 struct POINT { int x; int y; }; struct RECT struct POINT LeftTop; //struct POINT 구조체형 struct POINT RightBottom; //struct POINT 구조체형 int area;

a.area=(a.RightBottom.x-a.LeftTop.x)*(a.LeftTop.y-a.RightBottom.y); 소스 5-5 (ch05_03.cpp) struct RECT a; a.LeftTop.x=10; a.LeftTop.y=100; a.RightBottom.x=50; a.RightBottom.y=15; a.area=(a.RightBottom.x-a.LeftTop.x)*(a.LeftTop.y-a.RightBottom.y); cout << "직사각형 면적 : " << a.area << endl;

typedef 이미정의된내용 새로정의해서사용할내용; typedef int integer;  프로그램 코드에서 int를 integer로 사용하겠다는 의미!!! 구조체 선언에서 typedef와 함께 사용하면 프로그램 코딩이 효율적!!! typedef 이미정의된내용 새로정의해서사용할내용;

① ② struct sam { char Name[30]; char MPhoneNum[20]; } ; struct sam friend1, friend2; struct sam { char Name[30]; char MPhoneNum[20]; } ; typedef struct sam SAM; SAM friend1, friend2; ③ typedef struct sam { char Name[30]; char MPhoneNum[20]; } SAM ; SAM friend1, friend2;

소스 5-7 (ch05_02_3.cpp) typedef struct sam { char Name[30]; char MPhoneNum[20]; } SAM; SAM Friend, Friend1; strcpy_s(Friend.Name, 30, "김갑돌"); strcpy_s(Friend.MPhoneNum, 20, "010-8741-0000"); Friend1=Friend; cout << Friend.Name << endl; cout << Friend.MPhoneNum << endl; cout << Friend1.Name << endl; cout << Friend1.MPhoneNum << endl;

구조체 형 변수 초기화 변수 선언시 구조체 멤버 순서에 맞게 값을 할당하여 표시할 수 있음 typedef struct sam { char Name[30]; char MPhoneNum[20]; } SAM ; SAM friend1={“채치수”, “010-1111-2222”}, friend2;

헤더파일 1 헤더파일의 역할 프로그램에 필요한 선언 내용 예) iostream.h의 경우 프로그램 작성에서 입출력관련 동작을 수행할때 프로그램 파일에 포함시키면 간단하게 관련 내용을 컴파일러가 인지함!! C++ 표준 라이브러리는 확장자를 명시하지 않는 것을 원칙으로 함 (1998년 표준) 프로그램 시작 부분에 #include <헤더파일이름>으로 포함

헤더파일 2 사용자가 작성한 헤더파일은 확장자를 표기하고 #include “헤더파일이름.h”로 표기 구조체는 자료형 선언이므로 일반적으로 헤더에 포함시키는 것이 적절함!!

헤더파일에 새 항목 “config.h”를 추가하기 (234, 235쪽) #include <iostream> #include <string> using namespace std; typedef struct { char Name[30]; char MPhoneNum[20]; } SAM;

소스 파일 ch05_02_3.cpp 수정하기 (236쪽) #include "config.h“ int main() { SAM Friend; strcpy_s(Friend.Name, 30, "김갑돌"); strcpy_s(Friend.MPhoneNum, 20, "010-8741-0000"); SAM Friend1; Friend1=Friend; cout << Friend.Name << endl; cout << Friend.MPhoneNum << endl; cout << Friend1.Name << endl; cout << Friend1.MPhoneNum << endl; return 0; }

구조체 배열 구조체 형 배열 연속적인 기억장소 할당 소스 5-11 (ch05_04.cpp) #include <iostream> using namespace std; typedef struct { char Name[30]; char MPhoneNum[20]; } SAM;

int main() { SAM arr[5]={"김갑돌", "010-8741-0000", "이치수", "010-3456-0000", "정대호", "010-8765-0000", "한치욱", "010-1234-0000", "박사랑", "010-4567-0000"}; int i; cout << "기본 크기 : " << sizeof(SAM) << endl; for (i=0; i<5; i++) cout << "arr[" << i << "]의 주소 : " << &arr[i] << endl; cout << "이름 : " << arr[i].Name << ", 휴대폰 번호 : " << arr[i].MPhoneNum << endl; return 0; }

구조체 포인터 구조체 포인터 구조체 포인터의 멤버 참조 동일한 구조체형 변수의 주소를 저장 (*구조체형 포인터 변수).멤버 구조체형포인터변수->멤버

소스 5-13 (ch05_05_1.cpp) typedef struct { char Name[30]; char MPhoneNum[20]; } SAM; int main() SAM a={"김행복", "010-7777-3333"}; SAM *pa; pa=&a; cout << "이름 : " << a.Name << endl; cout << "이름 : " << (*pa).Name << endl; cout << "이름 : " << pa->Name << endl; cout << "전화번호 : " << pa->MPhoneNum << endl; return 0; }