1 / 126

C ++ 프로그래밍 시작

C ++ 프로그래밍 시작. Introduce C++ Language. C++ 언어란 ? C++ 언어는 c 언어를 확장시킨 언어 C 언어의 함수 , 배열 , 포인터 , 구조체를 포함하여 모든 문법적인 부분을 그대로 사용할 뿐 아니라 일부 문법은 훨씬 사용하기 편하게 개선이 되었음 C 언어는 절차지향언어이지만 C++ 언어는 객체지향 언어 C++ 언어의 특징 확장자는 *.cpp 함수 중간에 변수 선언이 가능 cin, cout 등 객체를 이용한 입 ・출력을 제공한다 .

evania
Download Presentation

C ++ 프로그래밍 시작

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 ++ 프로그래밍 시작

  2. Introduce C++ Language • C++ 언어란? • C++ 언어는 c언어를 확장시킨 언어 • C언어의 함수, 배열 , 포인터, 구조체를 포함하여 모든 문법적인 부분을 그대로 사용할 뿐 아니라 일부 문법은 훨씬 사용하기 편하게 개선이 되었음 • C언어는 절차지향언어이지만 C++언어는 객체지향 언어 • C++ 언어의 특징 • 확장자는*.cpp • 함수 중간에 변수 선언이 가능 • cin, cout 등 객체를 이용한 입・출력을 제공한다. • 메모리 구조는 c언어와 동일함 • 구성환경은 c언어와 동일

  3. Introduce C++ Language • C++언어의 탄생 및 역사 • C++ 언어는 1980년 벨 연구소의 BjarneStroustrup에 의해 탄생 • 1980년 당시에 C with class 라는 이름으로 발표되었으나1983년 C++로 변경되어 현재까지 사용되고 있음 • 1998년 ANSI 산하 공인 표준 연구회에서 C++언어에 대한 국제 표준안 제정

  4. C++ 간단한 소스코드 • 간단한 소스코드 작성 헤더 파일의 선언 -> #include <iostream> ∙ 출력의 기본구성 -> std::cout << [출력대상1] << [출력대상2] << [출력대상3] ∙ 개행의 진행 -> std::endl

  5. 소스 코드 분석 • iostream.h VS iostream • iostream.h 헤더파일은 cin과 cout 객체를 사용하기 위해 추가하는 헤더파일 • iostream.h는 과거의 표준방식을 따르겠다는 의미고, iostream은 현재의 표준방식을 따르겠다는 의미임 • cout 객체 • cout은 좌측 쉬프트 연산자(<<) 뒤에 있는 데이터를 출력 • 출력하고자 하는 데이터의 타입을 지정하지 않아도 자체적으로 출력 • 출력 데이터가 여러 개인 경우 좌측 쉬프트 연산자(<<)로 구분

  6. Cin 이라는 객체 • cin #include <iostream> int main(void) { int val1; std::cout<<“첫 번째 숫자입력: “; std::cin>>val; int val2; std::cout<<“두 번째 숫자입력: “; std::cin>>val2; int result=val1+val2; std::cout<<“덧셈결과: “<<result<<std::endl; return 0; } C++ 에서는 변수의 선언위치에 제한을 두지 않는다.

  7. 소스코드 분석 • cin 객체 • cin은 입력 받은 값을 우측 쉬프트 연산자(>>) 뒤에 있는 변수에 저장 • 입력하는 데이터의 타입을 지정하지 않아도 변수의 타입에 맞게 자체적으로 입력 • 입력 데이터가 여러 개인 경우 우측 쉬프트 연산자(>>)로 구분 ∙ 입력의 기본구성 -> std::cin >> [변수] ∙ 변수의 선언위치 -> 함수의 중간 부분에서도 변수의 선언이 가능

  8. 소스코드 분석 • std::endl • 줄 바꿈을 수행하는 명령 • '\n'과 동일한 명령으로 출력버퍼를 비우는 기능이 포함 됨

  9. cin 과 cout 의 특징 • cin과 cout은 타입에 관계없이 자체적으로 입・출력이 가능 • C언어의 printf나 scanf처럼 서식문자를 사용하지 않음 • cin과 cout을 이용한 입・출력의 특징 • 실수는 유효 자릿수까지 출력, 경우에 따라 지수 형태로도 출력 • char형 포인터 입력 : 주소부터 차례대로 문자열을 저장한 후 맨 뒤에 널 문자('\0')를 자동으로 추가 • char형 포인터 출력 : 주소부터 널 문자('\0') 이전의 문자열 출력 • 포인터에 저장 된 주소를 출력할 경우는 포인터 형이나 int형으로 형 변환 • 우측 쉬트프(>>)로 문자열 입력 시 공백 문자 포함 문자열을 받을 수 없음 • 우측 쉬프트 연산자(>>)는 연속적인 데이터를 입력 받기 위해 공백을 입력의 끝으로 처리하기 때문

  10. C++ 지역 변수 • C++ 의 지역변수 선언 #include <iostream> int main(void) { int val1; int result = 0; std::cout<<“두 개의 숫자입력: “; std::cin>>val1>>val2; if(val1<val2) { for(int i=val1+1; i<val2; i++) result+=i;} else { for(int i=val2+1;i<val2;i++) result+=;} return 0; } 연이은 데이터의 입력을 명령 할 수 있다. for문 안에서도 변수의 선언이 가능하다. for문 지역변수

  11. 실습문제 1 • C++ 언어를 사용 하여 구구단 프로그램 만들기 • 1. cout 과 cin 객체 사용 • 2. 단수를 입력 받아 • 3. 2~9 단 사이에 구구단을 출력 해주는 프로그램

  12. 실습문제 2 • C++ 언어를 사용 하여문자열 개수 맞추기 • 문자열과 문자를 입력받는다. 문자열에서 입력받은 문자의 개수가 몇 개인지 카운트 하는 프로그램을 작성해보자.

  13. Function Overloading

  14. Function Overloading • 함수 오버로딩이란? • C언어는 함수 이름만으로 함수를 호출하기 때문에 같은 이름의 함수사용이 불가능 • C++는 함수이름과 매개변수의 정보를 함께 가지고 호출하기 때문에 같은 이름의 함수 사용이 가능 • 함수 이름은 같지만 매개변수의 타입이나 개수가 다른 것을 함수 오버로딩이라 함 • 함수 오버로딩은 하나의 함수가 마치 여러 일을 하는 것처럼 정의할 수 있기 때문에 다형성(polymorphism)이 구현 됨

  15. Function Overloading • 함수 오버로딩의 이해 #include <iostream> int main(void) { MyFunc(20); //MyFunc(int num)함수의 호출 MyFunc(30,40); //MyFunc(int a,int b)함수의 호출 return 0; } int MyFunc(int num) { num++; return num;} int MyFunc(int a, int b) { return a+b;}

  16. Function Overloading • 함수 오버로딩

  17. Function Overloading 예제 #include <iostream> void func( ) { std::cout<<“void 매개변수 함수입니다.”<<std::endl;} void func(int a) { std::cout<<“int 변수 1개 함수입니다. “ <<std::endl;} void func(int a , int b) { std::cout<<“int 변수 2개 함수입니다.”<<std::endl;} void func(char a) { std::cout<<“char 변수 1개 함수 입니다.” <<std::endl;} int main(void) { func( ); func(10); func(10, 20); func(‘A’); return 0; }

  18. 실습 문제 1 • 함수 오버로딩을 사용하여 main 함수에서 필요로 하는 change 함수를만들어 보도록 하라. #include <iostream> int main(void) { int su1=10,su2=20; change(&su1,&su2); std::cout<<su1<<" "<<su2<<std::endl; double dou1=10.1,dou2=20.1; change(&dou1,&dou2); std::cout<<dou1<<" "<<dou2<<std::endl; char ch1='A',ch2='B'; change(&ch1,&ch2); std::cout<<ch1<<" "<<ch2<<std::endl; } 실행의 예

  19. 실습 문제 2 • 함수 오버로딩을 사용하여 main 함수에서 필요로 하는 swap 함수를만들어 보도록 하라. #include <iostream> int main(void) { int num1=20, num2=30; swap(&num1, &num2); std::cout<<num1<<‘ ‘<<num2<<std::endl; char ch1=‘A’, ch2=‘Z’; swap(&ch1, &ch2); std::cout<<ch1<<‘ ‘<<ch2<<std::endl; double dbl1=1.111, dbl2=5.555; swap(&dbl1, &dbl2); std::cout<<dbl1<<‘ ‘<<dbl2<<std::endl; return 0; } 실행의 예

  20. Default Parameter

  21. Default Parameter • 디폴트 매개변수란? • Default Parmeter란 매개변수에 기본 값이 있는 함수를 말함 • 함수 호출 시 전달되는 값이 있으면 전달된 값으로 대체되고 전달되는 값이 없으면 자신의 기본 값을 사용하는 설정 • 함수 오버로딩과 마찬가지로 Default Parameter 또한 하나의 함수가 마치 여러 일을 하는 것처럼 정의할 수 있기 때문에 다형성(polymorphism)이 구현 됨

  22. Default Parameter #include <iostream> void func(int a = 10 , int b = 20) { std::cout<<"첫번째 인자 : "<<a; std::cout<<" "<<"두번째 인자: "<<b<<std::endl;} int main(void) { func( ); //디폴트 매개변수값으로 받음 func(3); //왼쪽 매개변수 디폴트값에 저장됨 func(100, 200); //디폴트 매개변수값에 덮어씌어 버림 return 0; }

  23. Default Parameter • 디폴트 매개변수의 규칙 1(부분적 디폴트 값) • 매개변수의 디폴트 값은 오른쪽에서부터 차례대로 할당 ※ 전달되는 인자가 왼쪽에서부터 채워지므로, 오른쪽이 빈 상태로 왼쪽의 매개변수에만 일부 채워진 디폴트값은 의미를 갖지 못한다. 따라서 컴파일 에러를 일으킨다.

  24. Default Parameter • 디폴트 매개변수의 규칙2 • 함수 선언과 정의를 나눠 쓸 경우 디폴트 값은 선언 부에만 사용

  25. 실습문제 1 • 다음 함수의 문제점 찾기

  26. inline 함수

  27. inline 함수 • inline 함수란? • 매크로 함수의 단점을 보완한 함수 • Inline 함수의 특징 • 함수 호출에 의한 작업이 생략되어 프로그램 성능이 향상 • 함수 호출부마다 함수 정의부의 코드가 복사되기 때문에 전체 코드는 증가 • 매크로 함수의 처리는 전 처리기가 하지만 inline 함수의 처리는 컴파일러가 처리 • 함수의 크기가 작은 경우 활용 • inline 함수의 코드 크기가 너무 큰 경우 컴파일러가 무시하기도 함

  28. 매크로함수 #define SQUARE(x) ((x)*(x)) int main(void) { std::cout<<SQUARE(5)<<std::endl; return 0;} 선행처리 결과 (매크로는 전처리기가 처리한다.) int main(void) { std::cout<<((5)*(5))<<std::endl; return 0;} 장점. 함수가 인라인화 되어 성능의 향상으로 이어 질 수 있다. 단점. 함수의 정의 방식이 일반함수에 비해서 복잡하다. 따라서 복잡한 함수의 정의에는 한계가 있다.

  29. inline 함수 • inline 함수의 선언

  30. namespace

  31. Namespace • Namespace 란? • 이름 공간이라는 개념은 대형 프로젝트 내에서 이름 충돌을 막기 위한 도구로 일반적으로 규모가 작은 프로젝트 내에서는 거의 사용 되지 않음

  32. Namespace • Example1 (함수의 이름의 충돌)

  33. Namespace • Example2 (이름 충돌의 해결)

  34. Namespace • Example2 분석 존재하는 이름공간이 다르면 동일 한 이름의 함수 및 변수를 선언하는 것이 가능하다. 범위 지정 연산자

  35. Namespace 이름 공간 기반의 함수 선언과 정의의 분리

  36. Namespace • 동일한 이름 공간 선언된 이름공간의 이름이 동일하다면, 이둘은 동일한 이름공간으로 간주한다. 즉, SimpleFunc와 PrettyFunc는 동일한 이름 공간안에 존재하는 상황이다.

  37. Namespace • 동일한 이름 공간 내에서의 함수호출 이름공간을 명시하지않고 함수를 호출하면, 함수의 호출문이 존재하는 함수와 동일한 이름공간 안에서 호출할 함수를 찾게된다. 따라서SimpleFunc함수 내에서는 이름공간을 명시하지 않은 상태에서 PrettyFunc함수를 직접 호출 할수 있다.

  38. Namespace • 이름 공간의 중첩

  39. Namespace std::cout // 이름공간 std에 선언된 cout std::cin // 이름공간 std에 선언된 cin std::endl // 이름공간 std에 선언된 endl namespace std { cout . . . . . cin . . . . . endl . . . . .} <iostream>에 선언되어 있는 cout,cin,endl은 이름공간 std 안에 선언되어 있다. 이렇듯 이름충돌을 막기 위해서, C++표준에서 제공하는 다양한 요소들은 이름공간 std 안에 선언 되어 있다.

  40. Namespace • using을 이용한 이름공간의 명시 #include <iostream> namespace Hybrid { void HybFunc(void) { std::cout<<“So simple function!”<<std::endl; std::cout<<“In namespace Hybrid!”<<std::endl; } } int main( ) { using Hybrid::HybFunc; HybFunc( ); return 0; } 이름공간 Hybrid에서 HybFunc를 찾아라 라는 일종의 선언이다.

  41. Namespace • using을 이용한 cin,cout,endl을 전역에 명시 std 안에서 cin,cout,endl을 찾으라고 전역에 명시하는것과 같음

  42. Namespace • using을 이용한 namespace std를 전역 선언 이름공간 std에 선언된 모든 것에 대해 이름공간 지정의 생략 ※ 하지만 빈번한 using namespace의 선언은 이름의 충돌을 막기위한 이름공간의 선언을 의미 없게 만든다. 따라서 제한적으로 사용할 필요가 있다.

  43. Namespace • 이름공간에 별칭 부여와 전역변수 접근

  44. Namespace • Example

  45. Reference (참조자)

  46. Reference • Reference 란? • 기존에 선언된 변수에 붙이는 별칭

  47. Reference • Reference의 특징 • Reference 는 선언 시 & 연산자를 사용 • Reference 변수를 선언함과 동시에 초기화 해야 한다. • 상수는 초기화 할 수 없다. • Reference 의 데이터 형은 참조하는 변수의 데이터 형과 같아야 한다. • 참조 대상을 변경 할 수 없다. • 변수 하나에 여러 개의 Reference 를 적용할 수 있다.

  48. Reference • Reference 예제

  49. Reference • 다시보는 call-by-value 와 call-by-reference

  50. Reference • Reference 를 이용한 Call by Reference

More Related