컴퓨터 계측 및 실습 C++ 기초 영남대학교 기계공학부.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

1 구조체 윤 홍 란 컴퓨터 프로그래밍 2 구조체 정의  구조체란 ? o 서로 다른 형의 변수들을 하나로 묶어주는 mechanism. (cf. 배열 : 같은 형의 변수들을 하나로 묶어주는 mechanism) o 예 : 카드의.
1 컴퓨터정보과 MFC 의 개요 MFC 윈도우 애플리케이션을 생성하기 위해 만들어진 C++ 클래스 라이브러리 애플리케이션 프레임워크를 제공 MFC 의 이점 윈도우 프로그램 전문가로 만들어 준다. 개발시간을 단축시키고, 이식성이 강한 코드를 작성 ActiveX, OLE,
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
5. 접근 제한자의 이해 SCJP 자격증 프로젝트 발표자 : 노효진.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
MFC Application Frameworks (AFX)
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
Power Java 제3장 이클립스 사용하기.
최윤정 Java 프로그래밍 클래스 상속 최윤정
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 프로그래밍 언어 1-1 C 언어의 개론적 이야기 한글, 엑셀, 게임 등의 프로그램을 만들 때 사용하는 언어 ‘컴퓨터 프로그래머’라는 사람들이 제작 C 언어(C++ 포함)를 가장 많이 사용함.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
1. C++ 시작하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
C++ Programming: Sample Programs
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
C++ Espresso 제12장 템플릿.
자바 5.0 프로그래밍.
제4장 클래스와 객체 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
Java 6장. 클래스 : 속성 public class SumTest {
분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일.
자바 5.0 프로그래밍.
C#.
13. 연산자 오버로딩.
C 프로그래밍 C언어 (CSE2035) (Chap11. Derived types-enumerated, structure, and union) (1-1) Sungwook Kim Sogang University Seoul, Korea Tel:
7장 인터페이스와 추상 클래스.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
27장. 모듈화 프로그래밍.
명품 C++ 9장 가상 함수와 추상 클래스.
19. 함수 포인터와 void 포인터.
Lesson 2. 기본 데이터형.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
20장. 객체지향 프로그래밍 01_ 객체지향 프로그래밍의 시작.
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
자바 5.0 프로그래밍.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
Power Java 제11장 상속.
JA A V W. 06.
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
12. 상속 : 고급.
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
처음으로 배우는 C 프로그래밍 제6부 C++의 소개 제 14 장 추가적인 클래스 기능.
Chapter 2 C++ 함수와 네임스페이스. 최호성.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
중복 멤버의 처리 조 병 규 한 국 교 통 대 학 교 SQ Lab..
가장 많이 사용 Accelerator 최상위 WM_COMMAND, OLE 메시지 관련 이벤트 처리만 가능 이 클래스를 상속받아서 다른 이벤트 처리 이벤트 처리 관련 윈도우(창) 최상위 클래스 멀티 테스킹(모듈) CFrameWnd, Cview,
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
3. 모듈 (5장. 모듈).
구조체(struct)와 공용체(union)
9 브라우저 객체 모델.
컴퓨터 계측 및 실습 C++ 기초 영남대학교 기계공학부.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
C++ 언어의 특징
상속 (Inheritance) private 전용부분 전용부분 공용부분 공용부분 public 기본 클래스
7 생성자 함수.
6 객체.
MFC 기초 윈도우 응용프로그램 개발 간략한 역사 Microsoft Foundation Classes
Presentation transcript:

컴퓨터 계측 및 실습 C++ 기초 영남대학교 기계공학부

C 와 C++ 100 130 30 50 #include <stdio.h> void main() { int left,top,right,bottom; int MyunJyuk; left=30; top=100; right=50; bottom=130; MyunJyuk=(right-left)*(bottom-top); printf("면적 : %d m\n",MyunJyuk); } 100 130 30 50

C 에서 Structure 의 이용 구조체 (Structure) 란 ? - 편의상 단일 명칭하에 함께 묶어 놓은 하나 이상의 변수들의 모임 - 이때 변수들은 제각기 다른 데이터 형을 가질 수 있다. - 장점 1) 여러 개의 변수를 한 개의 이름으로 사용가능 2) 연관된 데이터를 하나로 묶을 수 있다. - 방법 주소록 서적 사각형 성 명 주 소 전화번호 Fax 생 일 저 자 제 목 출판사 출판연도 왼쪽 좌표 오른쪽 좌표 아래쪽 좌표 위쪽 좌표 구조체의 선언 구조 Structure 구조체명 { 데이터형 변수명1, 변수명2 ; };

C 에서 Structure 의 이용 예 #include <stdio.h> struct Sakak { int left,top,right,bottom; }; int surface(int x1,int y1,int x2,int y2) int S; S=(x2-x1)*(y2-y1); return S; } void main() struct Sakak rc; int MyunJyuk; rc.left=30; rc.top=100; rc.right=50; rc.bottom=130; MyunJyuk=surface(rc.left,rc.top,rc.right,rc.bottom); printf("면적 : %d m\n",MyunJyuk);

OOP (Object Orient Programming) - 개체 지향형 프로그램밍 - 자동차를 설계하는데, 승용차, 오픈카, 웨곤 스포츠카를 각각 설계하면 많은 설계작업이 필요 - 승용차(예:아반테)를 설계하고, 이를 변화시켜 스포츠카, 웨곤, 오픈카를 설계하면 설계가 용이 - 프로그래밍에서도 유사한 방법이 적용가능 - 이때, 승용차가 하나의 객체(Object)로 지정하고 그 설계를 이어 받아 다른 형태의 스포츠카나 오픈카로 변경하면 많은 부분의 설계를 추가작업 없이 이어 받을 수 있다. (속성계승 또는 상속) - 또한 다른 기능도 추가 가능 오픈카 소형차

C++ 에서 Class 란? - 변수 뿐만 아니라 함수도 정의 가능 - Class 로 선언된 변수 하나는 하나의 개체 (Object) 라 한다. 개체 지향 언어 Class 선언의 기본 구조 구조체의 선언 구조 Structure 구조체명 { 데이터형 변수명1, 변수명2 ; }; class 클래스명{ public: 변수명1, 변수명2; 함수명1(데이터형 변수명3) { 함수내용; } private: 변수명4, 변수명5; 함수명2(데이터형 변수명6) 객체 생성자 객체 파괴자 };

#include <stdio.h> class Sakak { public: int left,top,right,bottom; private: int surface() { int S; S=(right-left)*(bottom-top); return S; } void printS(void) { printf("면적 : %d m\n",surface()); Sakak(){ // a) 객체 생성자 ~Sakak(){ // b) 객체 파괴자 }; void main() { Sakak rc; // c) rc.left=30; // d) rc.top=100; // e) rc.right=50; // f) rc.bottom=130; // g) rc.printS(); struct Sakak { int left,top,right,bottom; }; int surface(int x1,int y1,int x2,int y2) { int S; S=(x2-x1)*(y2-y1); return S; } C 에서의 malloc 과 같은 개념 C 에서의 delete 와 같은 개념

*생성자에 따라 객체의 생성이 달라짐 #include <stdio.h> include <stdio.h> class Sakak { public: int left,top,right,bottom; private: int surface() { int S; S=(right-left)*(bottom-top); return S; } void printS(void) { printf("면적 : %d m\n",surface()); Sakak(){ // a) 객체 생성자 ~Sakak(){ // b) 객체 파괴자 }; void main() { Sakak rc; // c) rc.left=30; // d) rc.top=100; // e) rc.right=50; // f) rc.bottom=130; // g) rc.printS(); include <stdio.h> class Sakak { private: int x1,y1,x2,y2; int surface() { int S; S=(x2-x1)*(y2-y1); return S; } public: void printS(void) { printf("면적 : %d m\n",surface()); Sakak(int left,int top,int right,int bottom){ x1=left ; y1=top; x2=right; y2=bottom; ~Sakak(){ printf("Good bye\n"); }; void main() { Sakak rc(30,100,50,130); rc.printS(); *생성자에 따라 객체의 생성이 달라짐

스코우프 연산자 - 표시 방법 형선언 Clas명::함수명 - 용도 ; 어떤 클래스에 속한 함수인지를 명확하게 해주는 역할 - 용도 ; 어떤 클래스에 속한 함수인지를 명확하게 해주는 역할 - Class 선언부의 내용이 길어지고 복잡해지면, Class 선언부에서는 함수의 이름만 포함하고 나중에 상세내용을 지정할 때 쓰인다. - 일반적으로 Class 는 .h 라는 헤더 파일에서 지정하고, 그 멤버 함수들은 스코우프 연산자를 이용하여 .cpp 파일에서 작성한다.

#include <stdio.h> class Sakak { private: int x1,y1,x2,y2; int surface(); public: void printS(void); Sakak(int left,int top,int right,int bottom); ~Sakak(); }; int Sakak::surface() { int S; S=(x2-x1)*(y2-y1); return S; } void Sakak::printS(void) { printf("면적 : %d m\n",surface()); Sakak::Sakak(int left,int top,int right,int bottom) { x1=left ; y1=top; x2=right; y2=bottom; Sakak::~Sakak() { printf("Good bye\n"); void main() { Sakak rc(30,100,50,130); rc.printS(); 스코우프 연산자 프로그램 코딩이 복잡해지고 길어지면 대개는 이러한 방식으로 작성한다. 물론 두가지 방식을 혼용해서 사용할 수도 있다. 그리고 "::" 는 스코우프 연산자라고 하며, 함수가 어떠한 클래스에 있는지를 알려주는 중요한 연산자

다중정의(Overloading) - C++ 에서는 같은 이름의 다른 객체를 생성할 수 있다. 객체 다중정의 포함하는 인수의 형태는 서로 달라야 한다. - 또한 같은 이름의 함수를 여러 개 사용할 수 있다. 함수 다중정의 포함하는 인수의 형태는 역시 서로 달라야 한다. 즉 같은 내용의 함수이라도 주고 받는 데이터 형이 다른 경우에 함수이름은 변하지 않고 그 인수의 데이터 형에 맞는 함수를 호출한다.

객체 다중정의 (Overloading) 예 #include <stdio.h> class Sakak { private: int x1,y1,x2,y2; int k; int surface() { int S; S=(x2-x1)*(y2-y1); return S; } public: void printS(void) { printf("면적 : %d m\n",surface()); Sakak(int left,int top,int right,int bottom){ x1=left ; y1=top; x2=right; y2=bottom; k=1; Sakak(int left,int top){ x2=110 ; y2=120; k=2; Sakak(void){ x1=0; y1=0; x2=0; y2=0; k=3; ~Sakak(){ printf("Good bye %d\n",k); }; void main() { Sakak rc1(30,100,50,130); Sakak rc2(30,100); Sakak rc3; rc2.printS(); rc1.printS(); rc3.printS(); } 순서주의! 개체생성자가 3개 ? <결과화면> 면적 : 1600 m 면적 : 600 m 면적 : 0 m Good bye 3 Good bye 2 Good bye 1

다형성 (polymorphism) <결과> printdata(zz,(char)cc); 로 바뀌면? - 함수 다중정의의 다른 이름 #include <stdio.h> void printdata(int x,int y,int z) { // A) printf("Hi A), %d %d %d\n",x,y,z); } void printdata(int x,int y) { // B) printf("Hi B), %d %d\n",x,y); void printdata(int x,char c) { // C) printf("Hi C), %d %c\n",x,c); void main() { int xx,yy,zz,cc; xx=32; yy=33; zz=34; cc='K'; printdata(xx,yy,zz); // a) printdata(xx,yy); // b) printdata(zz,cc); // c) 매개변수의 갯수나, 데이터형(Type)에 따라 동일한 함수명(printdata)을 가졌다 할지라도 전혀 다른 함수명으로 간주 <결과> Hi A), 32 33 34 Hi B), 32 33 Hi B), 34 75 printdata(zz,(char)cc); 로 바뀌면?

Dynamic Object - 프로그램 실행하면서 중간에 클래스에 의한 객체를 생성하거나 파괴할 수 있다. - 이러한 객체를 포인터로 지정 및 사용가능하다. #include <stdio.h> class Sakak { private: int x1,y1,x2,y2; int surface() { int S; S=(x2-x1)*(y2-y1); return S; } public: void printS(void) { printf("면적 : %d m\n",surface()); Sakak(int left,int top,int right,int bottom){ x1=left ; y1=top; x2=right; y2=bottom; ~Sakak(){ printf("Good bye \n"); }; void main() { // Sakak rc(30,100,50,130); // a) Sakak *rc = new Sakak(30,100,50,130); // b) // rc.printS(); // c) rc->printS(); // d) delete rc; // e) printf("End\n"); // f) } 객체를 포인터로 선언 포인터로 선언된 객체의 멤버함수나 멤버변수 사용방법 면적 : 600 m Good bye End 만일 delete rc; 가 없다면?

속성계승 (Inheritance) class Volume : public Sakak { #include <stdio.h> class Sakak { protected: int x1,y1,x2,y2; int surface() { int S; S=(x2-x1)*(y2-y1); return S; } public: void printS(void) { printf("면적 : %d m\n",surface()); Sakak(int left,int top,int right,int bottom){ x1=left ; y1=top; x2=right; y2=bottom; ~Sakak(){ printf("Good bye \n"); }; class Volume : public Sakak { protected: int h; public: Volume(int left,int top,int right,int bottom,int height) : Sakak(left,top,right,bottom) { h=height; } ~Volume(){ printf("Good bye volume\n"); void printV(void){ printf("체적 : %d\n",h*surface()); }; void main() { // Sakak rc(30,100,50,130); // rc.printS(); Volume vc(30,100,50,130,2); vc.printV(); Volume 은 Sakak 의 파생클래스 Sakak 내의 속성을 상속받는다. 이미 만들어 놓은 Class 는 가급적 건드리지 않고 파생클래스를 만들어서 사용하면 프로그램을 수정하기 쉽다 Reuse 의 개념

클래스 계층 Sakak Avante Volume Avante Wagon Tiburon Tiburon Class Sakak() Open Car Class Sakak() { }; Class Volume:public Sakak() Sports Car New Sports 복잡한 계층의 한 예

MFC 란? - Microsoft Foundation Class (마이크로 소프트 사의 기반 클래스) - Visual C++ 과 함께 제공되는 내장 클래스(Library Class) - Visual C++ 를 사용해 윈도우 프로그램을 간단하게 개발할 수 있는 유용한 클래스 - 기본 Window 의 형태들은 새로 만들지 않고 MFC 를 상속받아 그냥 쓰면 된다. 프로그래머의 작업시간을 단축시켜줌

MFC 클래스의 기본구조 *화면상에 작동하는 모든 것(Ex:메뉴, 툴바, 상태바, etc)은 CWnd 를 상속받아 만들어짐

CWnd 를 상속받은 클래스들

멤버함수의 재정의 (Overriding) !!! Overloading 과 혼돈주의 부모클래스의 특정함수를 자식 클래스에서 재정의하여 호출. 사용할 수 있다는 것 class Volume : public Sakak { protected: int h; public: Volume(int left,int top,int right, int bottom,int height) : Sakak(left,top,right,bottom) { h=height; } ~Volume(){ printf("Good bye volume\n"); void printV(void){ printf("체적 : %d\n",h*surface()) void printS(void) { // d) printf("너비 : %d\n",surface()); } // f) }; void main() { Sakak rc(30,100,50,130); Volume vc(30,100,50,130,2); vc.printS(); // g) vc.printV(); #include <stdio.h> class Sakak { protected: int x1,y1,x2,y2; int surface() { int S; S=(x2-x1)*(y2-y1); return S; } public: virtual void printS(void) { // a) printf("면적 : %d m\n",surface()); } // c) Sakak(int left,int top,int right,int bottom){ x1=left ; y1=top; x2=right; y2=bottom; ~Sakak(){ printf("Good bye \n"); };

Application 프로그램 구조 인스턴스(Instance) 윈도안에 상주하는 하나의 집 윈도 클래스 인스턴스 안에 거주하는 하나의 윈도 윈도 클래스 인스턴스 안에 거주하는 또 하나의 윈도 프로그램이 실행되면 윈도에 등록되고, 이때 인스턴스를 부여받는다. 인스턴스 를 부여받으면 보통 작업표시줄에 해당 인스턴스명이 출력된다.

Window 프로그램의 종류 (1) Single Document Interface (SDI) (2) Multiple Document Interface (MDI) (3) Dialog Base

SDI (Single Document Interface) 의 구성 메인프레임(MainFrame) 메뉴 툴바 뷰 윈도(View) 템플릿 (Template) 도큐먼트(Document) 3개의 클래스가 연결되어 하나의 템플릿을 형성

MDI (Multiple Document Interface)의 구성 메인프레임(MainFrame) 자식프레임 (ChildFrame) 템플릿 (Template) 뷰 윈도(View) 도큐먼트(Document) 3개의 클래스가 연결되어 하나의 템플릿을 형성

Dialog base

간단히 Visual C++ 프로그램 만드는 방법 - Visual C++ Application Wizard 사용 - 기본 템플릿을 자동적으로 만들어 준다. - 윈도우 메시지를 처리할 수 있는 기본 함수들을 제공한다. - 윈도우 프로그래밍시의 단순 반복작업을 줄여서 프로그래머가 프로그램의 내용에 충실하게 해준다.

프로그램을 실행시켜 보자