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

Slides:



Advertisements
Similar presentations
Computer Graphics 윈도우 프로그래밍 김 창 헌김 창 헌. Computer Graphics 2 윈도우 시스템  윈도우  스크린 위에서 독립적으로 움직일 수 있는 사각형 영역  윈도우 시스템  유저와 어플리케이션간의 그래픽 스크린을 통한 인터페이스 를.
Advertisements

5장5장5장5장 개요 폼 개체 다중폼 개요 폼 개체 다중폼 다중폼. 2 학습목표 폼 개체를 학습한다. 다중폼에 대하여 학습한다.
미디어 프로그래밍 II 소개.
컴퓨터 계측 및 실습 C++ 기초 영남대학교 기계공학부.
컴퓨터 공학 설계 및 실험 I MFC programming
Kim Yeon Hee 8장. 상속과 다형성 Kim Yeon Hee.
3. C++와 객체지향 C++ 코딩 방법 객체 단위로 2 개의 파일 인터페이스 파일 구현파일
C++ Espresso 제1장 기초 사항.
Lecture 2 MFC and Application Frameworks
Chap05 상속 5.1 상속의 개요 5.2 멤버 변수의 상속 5.3 메소드의 상속과 오버라이딩(Overriding)
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 1-1 C 언어의 개론적 이야기 프로그래밍 언어란 무엇인가? 컴파일이란 무엇인가? 사람과 컴파일러가 이해할 수 있는 약속된 형태의 언어 C 언어도 프로그래밍 언어 중 하나이다. 컴파일이란 무엇인가? 프로그래밍.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
Lab 3 Guide: 교재 4장 대화상자 예제. - 프로파일 입력 ( 쪽)
에서 ( 탭 – [인기 다운로드 | 모든 다운로드] ) Visual Studio 2015
윤 홍 란 MFC 기초 윤 홍 란
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
8. 객체와 클래스 (기본).
C++ Espresso 제9장 다형성.
[INA470] Java Programming Youn-Hee Han
10장 객체-지향 프로그래밍 II ©창병모.
6장. printf와 scanf 함수에 대한 고찰
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
C++ Component System KASA 김성헌.
배열, 포인터, 참조 배열은 같은 형을 가지는 변수들의 묶음이다..
자바 5.0 프로그래밍.
프로그래밍 언어론 제 9 장 객체 지향 개념 객체 지향 방법론 객체 모델링 객체 지향 언어 C++ 객체 지향 언어 CLOS
졸업작품발표 타자 연습 프로그램 By.. Eunju 담당 교수 : 이형원 교수님 학번 : 이름 : 김은주.
6. 기본 클래스 프로그래밍 6 컴퓨터공학과 신동일.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 03. 클래스의 기본.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
MFC Application Frameworks (AFX)
Visual C++ Programming
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
MFC UI for TS Analyzer 서울시립대학교 컴퓨터통계학과 최 용 진.
2010학년도 2학기 객체지향의 이해.
C++ Programming: Sample Programs
영상처리 시작하기 & 영상처리 프로그램 만들기
C ++ 프로그래밍 시작.
This, static, final 지정 예약어 자바 4대 중첩 클래스
김 정 석 Web Programming 김 정 석
C++ 개요 객체지향 윈도우즈 프로그래밍 한국성서대학교 유일선
Visual Studio 2010 프로젝트 생성하기 PC화면에서 Visual Studio 2010 아이콘을 더블클릭 하거나
2009학년도 1학기 상지대학교 컴퓨터정보공학부 고 광 만
명품 C++ 프로그래밍 1장. C++ 시작.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Chapter 3 클래스. 최호성.
제1장 프로그래밍 기초
어서와 Java는 처음이지! 제9장 인터페이스, 패키지.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
소프트웨어 공학 (Software Engineering)
가상함수와 추상 클래스.
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
수학8가 대한 92~95 쪽 Ⅳ. 연립방정식 1. 연립방정식과 그 풀이 및 활용 >끝내기전에(9/9) 끝내기 전에.
Web programming Chap 04 상속 김 정 석
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
Chapter3 : 객체지향의 개념 3.1 객체지향(object-oriented)과
Chap02 객체 지향 개념 2.1 객체지향(object-oriented)과 절차지향(procedural-oriented)
실습과제 1(조건문, ) 표준입력으로 수축기 혈압을 입력 받아 그에 따른 적당한 표현을 화면에 출력하는 프로그램을 if-else 문을 이용하여 작성.
Chapter 02. 소프트웨어와 자료구조.
3D Shapes 3개 핵심 Properties가 존재 1.Material 표면의 재질을 설정합니다.
호서대학교 조교 사용자 설명(종합정보) 2014년 05월 15일.
[ 단원 06 ] 상속과 다형성.
3장,4장 발표 서정우.
뇌를 자극하는 C 프로그래밍.
6장 클래스(상속).
Java 5장. 객체지향 개념 public class SumTest {
C.
C++ 언어의 특징
프로그래밍 기법 최적화 프로그래밍.
발 표 자 : 7조 손 창 국 윤 오 성, 박 진 완 객체 지향 프로그래밍 C++
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 사용 - 기본 템플릿을 자동적으로 만들어 준다. - 윈도우 메시지를 처리할 수 있는 기본 함수들을 제공한다. - 윈도우 프로그래밍시의 단순 반복작업을 줄여서 프로그래머가 프로그램의 내용에 충실하게 해준다.

프로그램을 실행시켜 보자