1 / 285

C++ Programming Language

C++ Programming Language. C ontents. Chapter 01 C++ 시작하기 Chapter 02 C++ 기본문법 Chapter 03 객체지향 개념 (Object-Oriented Concepts) Chapter 04 클래스 (Class) Chapter 05 상속 (Inheritance) Chapter 06 연산자 오버로딩 (Operator Overloading) Chapter 07 템플리트 (Template) Chapter 08 예외처리 (Exception Handling)

jaxon
Download Presentation

C++ Programming Language

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++ Programming Language

  2. Contents Chapter 01 C++시작하기 Chapter 02 C++기본문법 Chapter 03객체지향 개념(Object-Oriented Concepts) Chapter 04클래스(Class) Chapter 05상속(Inheritance) Chapter 06연산자 오버로딩(Operator Overloading) Chapter 07템플리트(Template) Chapter 08예외처리(Exception Handling) Chapter 09스트림(Stream) Chapter 10이름공간(Namespace)

  3. Chapter01 C++시작하기

  4. C++ 언어 절차적 언어 객체지향 언어 C++언어의 소개 C++언어란? • 가장 대중적 언어인 C와 객체지향 패러다임의 만남 • C언어의 특성인 저수준의 하드웨어 접근과 OOP특성인 고수준의 추상화 제공 • C언어의 절차적 프로그래밍 기법과 객체 지향 프로그래밍 기법, 그리고 템플릿을 이용한 일반화 프로그래밍 기법 모두 사용 가능 • 순수한 의미에서의 객체지향 언어는 아니지만 가장 대중적으로 성공한 객체지향 언어

  5. 프로그래밍 과정 1. 프로그램 목적 정의 2. 프로그램 설계 3. 소스 코드 작성 4. 컴파일 & 링크 5. 프로그램 실행 6. 프로그램 검사와 디버그 7. 프로그램 유지와 보수

  6. 첫 만남, Hello, World~! /* Hello.cpp */ #include <iostream.h> int main(void) { cout << “Hello, World~!” << endl; return 0; }

  7. Chapter02 C++기본문법

  8. Contents • 데이터 타입(Data Types) • 연산자(Operators) • 프로그램 제어문(Control Flow) • 함수(Function) • 프로젝트 구성(Project Configuration)

  9. 데이터 타입(Data Type)

  10. bool형 특징 • 참, 거짓 중 어느 한 가지 값만 가질 수 있다. • 정수값으로 변환될 수 있다.(true = 1, false = 0) • 1 이상의 값은 항상 true가 된다. bool b = 7; // b is true. int i = true; // i is 1.

  11. 정수형 특징 • 각 정수 타입은 세가지 형태를 띤다 : int, unsigned int, signed int • 각 정수 타입은 세가지 크기를 지닌다 : short, int, long int • 정수 리터럴은 네 가지 값의 형태를 지닐 수 있다: decimal, octal, hexadecimal, character int num; int a, b, c; //한 문장에서 3개의 변수 선언 int age = 30; //선언과 동시에 초기화

  12. 실수형 특징 • 소수점 이하를 가지는 실수를 표현하고 저장하는 데이터 타입 • 실수형 데이터 타입은 세가지 크기를 가진다 : float, double, long double(기본 타입 : double) float a = 10, b = 20; double percent = a/100; double c = 0.3;

  13. 문자형 특징 • 하나의 문자 혹은 하나의 기호를 표현하고 저장하는 데이터 타입 • 표준 ASCII 코드(0 ~ 127) 사용(정수값 표현 가능) • 문자의 표현시 반드시 작은 따옴표(‘ ’)로 묶어준다 • 출력되지 않는 문자(Escape Sequences)를 사용한다 char grade; char gradeA = ‘A’, gradeB = 66; //선언과 동시에 초기화

  14. void형 특징 • 타입이 정해지지 않은 데이터를 위한 자료형 • 객체를 정의하기 위해 사용될 수 없다. • 함수의 리턴 값 혹은 인자가 없다는 의미로 사용될 수 있다. void x; // 오류 발생 : there are no void objects. void f (void); //함수 f는 인자와 리턴 값을 갖지 않는다.

  15. 데이터 타입의 크기 특징 • 데이터 타입의 크기는 시스템이나 운영체제, 컴파일러마다 달라질 수 있다.: <limits.h> 참조 • 타입간의 크기 순서는 정해져 있다. 1  sizeof(char)  sizeof(short)  sizeof(int)  sizeof(long) sizeof(float)  sizeof(double)  sizeof(long double) • sizeof 연산자를 이용하여 자료형의 크기를 확인할 수 있다.

  16. Enum(1) 특징1 • 사용자가 정수형 값에 이름을 주어 의미를 표현하고자 할 때 사용 • 정의된 후에는 정수형 타입으로 사용됨 • 값을 정하지 않는 경우, 디폴트로 0부터 증가하는 값을 가짐 • 프로그램의 가독성을 향상시키기 위해 사용 enum colors {RED, YELLOW, BLUE, GREEN}; //RED=0,YELLOW=1,BLUE=2,GREEN=3 enum font {ARIAL, CENTURY=10, GOTHIC, TIMESROMAN=20}; // ARIAL=0,CENTURY=10,GOTHIC =11,TIMESROMAN=20

  17. Enum(2) 특징2 • 값의 범위는 0부터 가장 가까운 2진 자릿수의 최대값까지이다. • 정수형 값을 명시적으로 형변환하여 대입할 수 있다. enum e1 {open, close}; //range : 0 ~ 1 enum e2 {a = 3, b = 10} //range : 0 ~ 15 enum flag {a = 1, b = 2, c = 4, d = 8}; //range : 0 ~ 15 flag f1 = 5; //type error flag f2 = flag(5); //OK flag f3 = flag(c|d); //OK

  18. typedef 특징 • 어떤 타입에 대한 새로운 이름을 부여하는 것 • 새로운 타입이 생성되는 것이 아니라 별명이 생긴다고 할 수 있음 typedef char* PCHAR; typedef unsigned long ulong; PCHAR p1; ulong var1;

  19. 구조체(1) 특징1 • 임의 타입의 변수들의 집합체 • 구성하는 모든 멤버 변수들의 데이터 타입이 같아도 되고, 달라도 된다. • 포인터 변수나 배열도 멤버 변수로 사용할 수 있다. • 멤버 변수의 접근을 위해서 dot(.)을 사용한다. struct phone { //phone 이라는 이름(태그)의 구조체 선언 char name[20]; //첫번째 구조체 멤버 char phoneno[20]; //두번째 구조체 멤버 } struct phone myphone; cout << myphone.name << endl; cout << myphone.phoneno << endl;

  20. 구조체(2) 특징 • struct로 정의된 타입은 typedef를 이용하여 독립적인 타입으로서 사용될 수 있다. • 동일한 타입일 경우, 대입과 복사 연산이 가능하다. typedef struct { char name[20]; //첫번째 구조체 멤버 char phoneno[20]; //두번째 구조체 멤버 } Phone; Phone myphone; strcpy(myphone.name, “Hong, Gil-Dong”); strcpy(myphone.phoneno, “02-111-1234”); Phone yourphone = myphone;

  21. 구조체(3) 특징 • 변수를 정의할 때 초기화 블록을 사용하여 초기화할 수 있다. • 중첩 구조체를 선언할 수 있다.(중첩 구조체 : 다른 struct 타입의 변수를 포함하는 구조체) • 중첩 초기화를 통해 모두 한꺼번에 초기화할 수 있다. typedef struct { char name[20]; //첫번째 구조체 멤버 char phoneno[20]; //두번째 구조체 멤버 } Phone; Phone myphone = {“Hong, Gil-Dong”, “02-111-1234”};

  22. 구조체(4) 특징 • Strict Type Checking : 두 구조체 타입이 같은 타입의 동일한 이름을 가진 변수들을 똑같이 가지고 있더라도, 구조체 이름이 다르다면, 다른 타입으로 인식한다. struct phone{ char name[20]; char phoneno[20]; }; struct person { char name[20]; char phoneno[20]; }; struct phone ph = {“Hong, Gil-Dong”, “02-111-1234”}; person pe = ph; //type mismatch error

  23. 구조체(5) 특징 • 비트 단위로 타입 내의 변수들을 구성할 수 있다. • 메모리의 효율성을 제공한다. • 구조체 선언에서 각 비트 필드에 레이블을 붙이고 크기를 지정한다. • 각 비트마다 가질 수 있는 값은 0과 1 뿐이다. struct sreg { unsigned int enable : 1; unsigned int page : 3; unsigned int : 1; //unused unsigned int mode : 2; unsigned int access : 1; unsigned int length : 1; }; struct sreg s1; s1.page = 5;

  24. 공용체(Union) 특징 • struct와 유사하나, 타입 내의 모든 멤버 변수들 중 가장 큰 크기를 가진 변수만큼만 메모리가 할당된다. • 타입내의 여러 멤버 변수들 중 한가지로만 사용될 수 있다. union MyType { int num1; double num2; char ch; }; //이 때, mytype 타입의 변수들은 8bytes(=>double의 크기)의 저장공간을 사용하게 된다.

  25. 포인터(1) 특징 • 메모리의 주소값을 저장하는 변수 • 타입T*의 변수는 T타입 객체의 주소를 가질 수 있다. • 배열이나 함수를 가리키는 포인터를 정의할 수 있다. • 간접연산자(*): 뒤에 포인터 이름이나 주소가 따라올 경우, *는 가리켜진 주소의 메모리 공간에 저장된 값을 반환한다. • 주소연산자(&): 뒤에 변수 이름이 따라올 경우, 그 변수가 위치한 메모리 공간의 주소를 반환한다. 0x1000 0x1004 0x1008 0x100c num1 = 20 num2 = 30 pi = 0x1000 int num1 = 20; int num2 = 30; int *pi; pi = &num1; cout << *pi << endl;

  26. 포인터(2) int * pi; //pointer to int char ** ppc; //pointer to pointer to char int (*ap)[4]; //pointer to array of 4 ints int (*fp) (char*); //pointer to function taking a char* arguments; //returns an int int * f(char *); //function taking a char* argument; //returns a pointer to int* pi function code forint f(char) 123 ppc ‘a’ ap 123 234 456 678

  27. 포인터(3)-void* 특징 • 선언시에 포인터의 타입이 정해지지 않는다. • 모든 객체의 포인터 변수는 void* 타입으로 매핑될 수 있다. • void* 타입의 객체는 다른 타입으로 명시적인 변환이 가능하다. • void* 타입의 두 객체에 대한 동일성 비교가 가능하다. • 그 외의 연산은 불가능하다. void f(int * pi) { void* pv = pi; //ok : implicit conversion *pv; //error : can’t dereference void* pv++; //error : can’t dereference void* int* pi2 = (int*) pv; //ok : explicit conversion double* pdl = pv; //error }

  28. v1 1 3 4 2 v2 5 7 6 v3 1 0 0 배열(1) 특징 • 한가지 데이터 타입으로 이루어진 일련의 요소의 모임 • 배열은 생성과 동시에 초기화할 수 있다. • 콤마로 구분된 값의 목록을 중괄호로 둘러싸는 방법으로 초기화한다 • 초기화 값의 목록이 배열의 크기보다 모자랄 경우 컴파일러는 나머지 요소의 값을 0으로 설정한다. • 초기화 값의 목록이 배열의 크기보다 클 경우 컴파일러는 오류로 처리한다. int v1[4] = { 1, 2, 3, 4 }; int v2[] = { 5, 6, 7 }; int v3[3] = { 1 }; int v4[4] = { 2, 3, 4, 5, 6, 7 }; //error

  29. 배열(2) 특징 • 다차원 배열을 구성할 수 있으며, 초기화 또한 가능하다. • 2차원 배열 : 배열의 배열(행과 열로 구성되는 표 형태) • 3차원 이상의 배열 : 행과 열로 쌓여 있는 표가 여러개 쌓여 있는 형태 int v1[2][3] = { {1,2,3}, {4,5,6} }; int v2[][3] = { {1,2,3}, {4,5,6}, {7,8,9} }; v1 1 3 2 => 논리적 구조 4 6 5 v1 1 3 4 6 2 5 => 물리적 구조

  30. Reference(1) 특징 • 이미 존재하는 객체에 붙이는 별명 • 항상 초기화되어야만 사용 가능하다. • 레퍼런스로 수행하는 연산은 레퍼런스가 참조하는 변수를 가지고 수행하는 연산과 같은 효과를 나타낸다. void f() { int num 1 = 10; int &ref = num1; int num2 = ref; ref = 20; }

  31. Reference(2) 특징 • 레퍼런스는 인자 전달(argument passing)에서 call-by-reference를 구현한다. void increment(int& aa) {aa++;} void g() { int x = 1; increment(x); }

  32. Constant(1) 특징 • 상수는 선언된 값을 변경할 수 없으며, 항상 초기화하여 사용해야 한다. const int model = 90; const int v[] = {1, 2, 3, 4}; const int x; //error : no initialization void f() { model = 200; //error v[2]++; //error }

  33. Constant(2) 특징 • 값과 포인터를 상수화할 수 있다. void f(char* p) { char s[] = “Gorm”; const char* pc = s; //constant pc[3] = ‘g’; //error pc = p; //OK }

  34. Storage Class(1) 유효범위(Scope) • 어떤 변수에 접근할 수 있는 구역 혹은 프로그램의 구역 • 블록 범위 : 서로 짝이 되는 { 와 } 사이의 영역 내에서 유효한 범위 • 파일 범위 : 변수가 정의된 지점으로부터 그 파일의 끝까지 유효한 범위 연결성 • 외부 연결성 : 여러 파일로 구성된 프로그램의 어디서든 사용할 수 있는 것 • 내부 연결성 : 그 변수가 선언된 파일 안에서만 사용할 수 있는 것 • 연결성 없음 : 자신이 정의된 블록 내에서만 사용할 수 있는 것 저장기간 • 정적 저장 기간 : 변수가 프로그램이 실행되는 기간 내내 존재하는 것 • 자동 저장 기간 : 변수가 정의된 블록에 프로그램 제어권이 들어왔을 때부터 블록을 빠져나갈 때 까지 존재하는 것

  35. Storage Class(2) 자동 변수 • 보통 특정 블록, 혹은 함수의 시작 부분에 선언되며, 그 블록 혹은 함수 내에서만 사용된다. 레지스터 변수 • CPU와 같은 빠른 메모리에 저장되며, 그 성격은 자동 변수와 같다. 블록범위 정적변수(Static) • 자동변수와 같이 특정 블록 혹은 함수 내에서만 사용될 수 있으나, 해당 블록 혹은 함수 종료 후에도 존재하게 되며 프로그램이 완전히 종료되어야 소멸된다. void StaticFunction(int val) { static int count = 0; count = count + val; cout << count << endl; } 이 함수가 처음 호출되었을 때만 초기화되고, 그 이후에 함수가 호출될 때는 이전에 계산된 값을 그냥 사용하게 된다.

  36. Storage Class(3) 외부 연결 정적 변수(전역변수) • 함수의 외부에 선언하며 프로그램의 시작부터 종료까지 프로그램 전체(모든 파일)에서 사용한다. 내부 연결 정적 변수(전역변수) • 함수의 외부에 선언하며 프로그램의 시작부터 종료까지 살아있지만, 변수의 선언이 포함된 파일 내에서만 사용된다.

  37. 데이터 타입의 변환(형 변환) 암시적 형 변환(자동 형 변환) • 연산자를 기준으로 하여 왼쪽의 데이터와 오른쪽의 데이터의 타입이 서로 다른 경우에 연산을 수행하기 위하여 발생하는 형 변환 • Type Promotion(형 승격) 동일 종류의 데이터 타입에 대해 타입의 표현 범위가 큰 쪽으로 타입을 변환한다. (예) bool, char, short -> int • Standard Type Conversion(표준 형 변환) 기본 데이터 타입간의 가능한 형 변환을 이용하여 찾는다. (예) int <- -> double 명시적 형 변환(강제 형 변환) • 프로그래머의 명시적인 선언에 의해서 발생하는 형 변환 (예) float f = (float)100;

  38. 연산자(Operators)

  39. 범위 지정 연산자(Scope Resolution) 특징 • 접근하려고 하는 변수에 대한 범위를 지정할 때 사용하는 연산자 • 전역 변수에 대한 접근을 위해 사용하기도 하므로, 전역 변수 연산자라고도 한다. int amount = 123; void main() { ::amount = 100; cout << “::amount = “ << ::amount << endl; }

  40. 산술연산자 특징 • 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 연산을 수행하는 가장 기본적이며 자주 사용하는 연산자

  41. 증감연산자 특징 • 피연산자를 1씩 증가 혹은 감소 시키는 단항 연산자 • 연산자의 위치에 따라 증감의 시점이 달라지게 되어(전위/후위 연산자), 수식 내에서 사용시에 주의해야 한다

  42. 대입연산자 특징 • 우변값을 좌변에 대입하는 연산자

  43. 비교연산자(관계연산자) 특징 • 좌변값과 우변값을 비교하여 누가 큰지, 작은지, 같은지, 같지 않은지 등의 관계를 알려주는 연산자 • 비교 조건이 만족되면 true(=1), 만족하지 못하면 false(=0)를 반환

  44. 논리연산자 특징 • 둘 이상의 비교(관계)식을 결합하는 연산자

  45. 비트 논리 연산자 특징 • 비트 단위(0 또는 1)로 연산을 할 때 사용하는 연산자 • 정수 타입 데이터들만 사용할 수 있다 (char타입 포함)

  46. 비트 시프트 연산자 특징 • 비트를 왼쪽에서 오른쪽으로, 혹은 오른쪽에서 왼쪽으로 이동시키는 연산자

  47. 변환연산자(캐스트연산자) 특징 • 수식내에서 변수의 데이터 타입을 강제로 변환시키는 연산자(명시적 형변환) int a; double b = 10.25; a = (int)b; //b의 실수값이 정수형으로 변환된 후 a에 대입된다.

More Related