C++ 언어의 특징 2006. 9. 12.

Slides:



Advertisements
Similar presentations
Copyright © 2015 Pearson Education, Inc. 6 장 : 프로그래밍 언어.
Advertisements

Kim Yeon Hee 8장. 상속과 다형성 Kim Yeon Hee.
Chapter 02. C언어 기반의 C++ 박 종 혁 교수 UCS Lab SeoulTech Tel:
3. C++와 객체지향 C++ 코딩 방법 객체 단위로 2 개의 파일 인터페이스 파일 구현파일
C++ Espresso 제1장 기초 사항.
Internet Computing KUT Youn-Hee Han
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
C++ Exspresso 제5장 클래스의 기초.
Internet Computing KUT Youn-Hee Han
2주 실습강의 Java의 기본문법(1) 인공지능연구실.
8. 객체와 클래스 (기본).
Internet Computing KUT Youn-Hee Han
C++ 프로그래밍 2009년 2학기 전자정보공학대학 컴퓨터공학부.
C++ 프로그래밍 2007년 1학기 전자정보공학대학 컴퓨터공학부.
C++ Espresso 제9장 다형성.
10장 객체-지향 프로그래밍 II ©창병모.
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
Part 08 함수 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
C++ Component System KASA 김성헌.
객체지향 언어와 클래스, 객체 ㅎㅎ 개요 클래스의 선언, 객체의 생성 및 속성 참조 방식 멤버 변수 메소드 한빛미디어(주)
배열, 포인터, 참조 배열은 같은 형을 가지는 변수들의 묶음이다..
자바 5.0 프로그래밍.
쉽게 풀어쓴 C언어 Express 제17장 동적 메모리와 연결 리스트 C Express.
동적메모리와 연결리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
[INA240] Data Structures and Practice
3장. 포인터, 배열, 구조체 포인터, 배열, 구조체 학습목표 기본적 데이터 타입
상속이란? - 기반클래스로부터 다른 클래스를 파생하는 법 protected란? 가상함수 (virtual function)
MFC Application Frameworks (AFX)
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
7장 클래스.
윤 홍 란 4 장 클래스 작성 윤 홍 란
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Power Java 제7장 클래스와 객체.
C ++ 프로그래밍 시작.
C++ Programming: chapter 7 – inheritence
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 08. 상속과 다형성.
김 정 석 Web Programming 김 정 석
C++ 개요 객체지향 윈도우즈 프로그래밍 한국성서대학교 유일선
프로그래밍2 및 실습 C언어 기반의 C++ 2.
2009학년도 1학기 상지대학교 컴퓨터정보공학부 고 광 만
명품 C++ 프로그래밍 1장. C++ 시작.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Chapter 3 클래스. 최호성.
소프트웨어 공학 (Software Engineering)
가상함수와 추상 클래스.
메소드와 클래스 정의 및 문제 풀이 Method and Class Define and Problem Solve
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
컴퓨터공학실습(I) 3주 인공지능연구실.
Java IT응용시스템공학과 김형진 교수 5장. 객체지향 개념 public class SumTest {
Chapter3 : 객체지향의 개념 3.1 객체지향(object-oriented)과
Chap02 객체 지향 개념 2.1 객체지향(object-oriented)과 절차지향(procedural-oriented)
Byte Alignment ㈜ 웰컴정보시스템 김 정 은.
Chapter 4 변수 및 바인딩.
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
Chapter 02. 소프트웨어와 자료구조.
A Basic of C++.
3장,4장 발표 서정우.
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
6장 클래스(상속).
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
자료구조 세미나 발표 주제: 자료구조 기초 - 1회 차: 자료구조의 정의, 기초 지식 (함수, 포인터, 레퍼런스)
컴퓨터 계측 및 실습 C++ 기초 영남대학교 기계공학부.
캡슐화 (Encapsulation) 두원공과대학 소프트웨어개발과 이 원 주.
C# 09장. 클래스와 객체.
17장. 포인터의 포인터.
C.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 02. C언어 기반의 C++ 2.
배열, 포인터, 함수 Review & 과제 1, 2.
프로그래밍 기법 최적화 프로그래밍.
발 표 자 : 7조 손 창 국 윤 오 성, 박 진 완 객체 지향 프로그래밍 C++
Presentation transcript:

C++ 언어의 특징 2006. 9. 12

Contents C and C++ Structure Class OOP Constructor and Destructor Classes Dynamic Memory Allocation Operator Overloading Inheritance Overriding of member function Virtual Functions this Pointer friend Reference 영상통신연구실 박 원 배

C and C++ C C++ 함수로 이루어짐 구조적 프로그래밍 Top-Down 방식 프로그램을 기능 단위로 세분 중형 프로그램 클래스로 구성 객체 지향 프로그래밍 Bottom-Up방식 프로그램을 오브젝트 단위로 세분 대형 프로그램

C and C++ int func() ; - C : 함수의 매개 변수에 대해서 모른다. - C++ : 함수에 매개 변수가 없다. int func() = int func(void) C++에서는 모든 함수가 원형으로 선언되어야 한다. C++에서는 함수의 리턴값이 있다고 선언되었으면 반드시 값을 return 해야 한다. C에서 지역 변수는 그것을 사용하는 문장 이전에 블록의 시작에서만 선언하고 , C++에서 지역 변수는 어느 곳에서나 선언 영상통신연구실 박 원 배

Structure Structure Struct Date { int year; int month; int day; }; main() { Date Birthday; Birthday.year = 1973; Birthday.month=8; Birthday.day=8; printf(“나의 생일은 %d년 %d년 %d일!”, Birthday.year,Birthday.month,Birthday.day); } Structure 데이터를 일괄적으로 관리하기 위해 사용 영상통신연구실 박 원 배

Definition of Class Class 데이터 추상화를 사용자 정의 타입으로 바꿀 수 있는 C++의 도구 데이터를 표현하는 것과 데이터를 처리하는 method를 같이 하나의 패키지로 구성 Class 클래스 정의부 : 클래스를 구성하고 있는 멤버 함수와 데이타들 클래스 method 정의부 : 클래스내에 있는 method의 구현부 영상통신연구실 박 원 배

Declaration of Class 키워드 class는 클래스 정의를 식별 클래스명은 이 사용자 정의형의 이름으로 된다. 클래스명은 이 사용자 정의형의 이름으로 된다. class Date { private : // 멤버 변수 int year; int month; int day; public : // 멤버 함수 BOOL SetDate(int y,int m,int d); void ShowDate(); }; 키워드 private는 public 구성원 함수를 통해서만 접근할 수 있는 클래스 구성원을 식별 영상통신연구실 박 원 배

Implementing Class Member Functions 멤버 함수를 정의할 때에는, 함수가 어느 클래스에 속하는 것인지를 나타내기 위하여 범위 연산자( :: ) 를 사용 클래스 method는 클래스의 private요소를 access 할 수 있다. BOOL Date :: SetDate(int y, int m, int d) { year = y; month = m; day = d; return True; } void Date :: ShowDate() printf(“%d년 %d월 %d일\n”, year,month,day); 영상통신연구실 박 원 배

Practical Use of Class Memory # include “dateclass.h” MyBirthday year main() { // Data형의 인스턴스 두개 생성 Date MyBirthday, YourBirthday; MyBirthday.SetDate(1973,7,10); YourBirthday.SetDate(1997,7,7); MyBirthday.ShowDate(); YourBirthday.ShowDate(); } MyBirthday Instance year month 멤버 변수는 각 instance 마다 독립적으로 생성 day year month YourBirthday Instance day 멤버 함수는 모든 instance가 공유 SetDate ShowDate 영상통신연구실 박 원 배

Object Oriented Programming 자세한 사항은 무시하고 본질적인 특징에 집중하도록 하는 과정 Procedural abstraction and Data abstraction 추상화 (Abstraction) 자세한 사항은 무시하고 본질적인 특징에 집중하도록 하는 과정 즉, 데이터 추상화와 절차적 추상화 기법을 묶어 하나의 단위로 취급 은닉화 (Encapsulation) 새로운 클래스가 다른 클래스에서 데이터와 함수를 상속 받아 여기에 좀더 특별한 기능을 갖게 할 수 있는 과정 상속성 (Inheritance) 같은 메시지에 대해 오브젝트가 다르게 행동 Overloading 다형성 (Polymorphism) 영상통신연구실 박 원 배

생성자(Constructor)와 소멸자(Destructor) Source1.cpp Constructor 클래스와 이름이 같고 리턴값이 없다. 클래스의 오브젝트가 생성될 때마다 자동적으로 호출되며 초기화에 사용된다. 하나의 클래스에 대하여 매개 변수가 다른 여러 개의 생성자를 선언할 수 있다. 특히, 매개변수가 없는 생성자를 디폴트 생성자라 함. Destructor 클래스의 오브젝트가 메모리 블록에서 해제될 때 자동적으로 호출되는 특별한 멤버 함수, 주로 메모리의 내용을 지울 때 사용 리턴값이 없고 선언된 타입을 갖지 않고 전달인자를 갖지 않는다. 영상통신연구실 박 원 배

클래스의 사용 객체의 치환 - 하나의 객체는 같은 형의 다른 객체에 치환될 수 있다. (source2.cpp 참고) 함수로의 객체 전달 - 인수로서 다른 자료형들을 함수에게 전달하는 것과 같은 방법으로 인수로서 객체를 함수에게 전달. Call by value 방식으로 전달 (source3.cpp 참고) 함수로부터 객체의 반환 - 객체를 반환하기 위해서는 반환형으로 클래스형을 함수와 같이 선언 - return문을 사용하여 그 형의 객체를 반환 (source4.cpp 참고) 영상통신연구실 박 원 배

Dynamic Memory Allocation malloc() 와 free() 사용 C new 와 delete 사용 C++ new 연산자는 자신이 메모리를 할당하는 오브젝트의 데이터형을 알고 있으며, 그 데이터형의 포인터를 리턴한다. new 연산자는 클래스와 같은 사용자가 정의한 추상적인 데이터형뿐 아니라, char,int 같은 내장 데이터형에도 사용 char *newarray ; newarray = new char [10] ; …… delete [] newarray ; 영상통신연구실 박 원 배

연산자 오버로딩(Operator Overloading) C++의 클래스는 내장 데이터형과 마찬가지로 오브젝트들간에 대해서도 연산기능을 부여. 즉, 연산자의 의미를 재정의하여 새로운 데이터형에 기능을 부여 operator 라는 예약어를 사용 Class Counter { private : int count; public : void operator++() { ++count ; } void operator+(Counter x); } Counter Counter:: operator+(counter x) { Counter temp; temp.count = count + x.count; return temp; } Counter a , b, c ; ++a; c = a + b; 영상통신연구실 박 원 배

상속성(Inheritance) #1 클래스간의 계층 관계에서, 상위 레벨에 있는 클래스를 먼저 구현하고 하위 레벨에 있는 클래스는 상위 클래스에 있는 모든 특성을 전달 받아 만들 수 있다. 기반 클래스(base class) - 상위 레벨에 있는 클래스 파생 클래스(derived class) - 하위 레벨에 있는 클래스 Class BaseClass { public : int basevar1; int basevar2; BaseClass(); ~BaseClass(); void basefunc1(); }; Class DerivedClass : public BaseClass { public : int derivedvar; void derivedfunc(); }; 영상통신연구실 박 원 배

protected와 private의 공통점 protected와 private의 차이 상속성(Inheritance) #2 protected와 private의 공통점 Protected 나 private로 선언된 멤버 변수와 멤버 함수는 클래스 내부에서만 접근할 수 있고, 외부에서는 접근할 수 없다. protected와 private의 차이 기반 클래스에서 선언된 protected와 public 멤버는 파생 클래스의 내부에서 사용할 수 있지만, 기반 클래스에서 private로 선언된 멤버는 파생 클래스에서 내부적으로 사용할 수 없다. 영상통신연구실 박 원 배

상속성(Inheritance) #3 public 상속과 private 상속 public으로 private로 기반 클래스 Source5.cpp public 상속과 private 상속 기반 클래스 파생 클래스 private public으로 상속 받은 경우 private protected protected public public 외부 접근 기반 클래스 파생 클래스 private private로 상속 받은 경우 private protected protected public public 외부 접근 영상통신연구실 박 원 배

Overriding of member function 기초 클래스의 멤버 함수를 재정의 할 수 있도록 허용 기반 클래스에 이미 존재하는 함수를 파생 클래스에서 오버라이딩 하면, 파생 클래스에서는 기반 클래스의 함수가 무시되고, 파생 클래스에 새로 정의된 함수가 동작됨. Overloading 하나의 함수명에 비슷한 기능을 하면서, 넘겨 받는 인자나 리턴값이 서로 다른 여러 가지 함수를 정의 int test(int a, int b), double test(doube a, double b) ... 영상통신연구실 박 원 배

가상 함수 (Virtual Function) 파생 클래스에서 재정의(overloading)될 것으로 기대되는 멤버함수 기반 클래스에서 선언된 멤버함수 앞에 virtual 이라는 키워드를 사용 class Base { public: virtual void Show(); }; void Base :: Show() cout << “기반 클래스\n” ; } class Derived : public Base public: void Show(); void Derived :: Show() cout << “파생 클래스\n”; void main() { Base base; Derived derived; Base *ptr; ptr = &base; ptr->Show(); ptr = &derived; } Result : 기반 클래스 파생 클래스 영상통신연구실 박 원 배

this Pointer C++에서 사용하는 포인터로 어느 멤버 함수가 호출되건 간에 멤버 함수에게 전달되는 포인터이며, 호출한 객체를 가리키는 포인터이다. 멤버함수가 호출될 때 멤버 함수는 호출한 객체에 대한 this 포인터를 자동으로 전달 받는다. Class ThisPointer { public : int data; void Showthis(); }; void ThisPointer() cout << “Object address : ” << this ; } void main() { ThisPointer a,b,c ; a.Showthis(); b.Showthis(); } Result : Object address : 0x8fd50ffe Object address : 0x8fd50ffc 영상통신연구실 박 원 배

friend friend function friend class 클래스의 실제 멤버 함수가 아닌 함수를 이용하여 클래스의 비공개 멤버를 접근해야 할 필요가 있을 때 사용 friend 함수는 멤버 함수가 아닌 일반 함수로 정의 friend 함수로 사용되는 클래스의 선언부에 그 원형이 포함되어야 하며 앞에 friend 라는 키워드를 사용 friend class 하나의 클래스에서 다른 클래스를 friend로 선언하면, friend 로 선언된 클래스에서는 자기를 friend로 선언한 클래스의 어떠한 멤버에도 접근이 가능 friend 선언은 한 방향으로만 접근 가능 영상통신연구실 박 원 배

참조(Reference) 여러 가지 목적을 위해서 변수의 또 다른 이름으로 사용되는 내재된 포인터 #include <iostream.h> void func(int *n); main() { int a=0; func(&a); cout <<“Ref example ” <<a <<“\n”; return 0; } void func(int *n) *n=100; } // call by reference #include <iostream.h> void func(int &n); main() { int a=0; f(a); cout <<“Ref example ” <<a <<“\n”; return 0; } void func(int &n) n=100; } // reference parameter 영상통신연구실 박 원 배