명품 C++ 프로그래밍 2장. C++ 프로그래밍의 기본.

Slides:



Advertisements
Similar presentations
Python Ch.06 RaspberryPi Sejin Oh. Raspberry Pi Python  IDLE(Integrated Development Environment)  라즈베리 파이 배포본들은 일반적으로 파이썬과 파이썬 3 의 IDLE 파 이썬 개발 도구를.
Advertisements

Chapter 12. 배열. 배열  동일한 항목들이 동일한 크기로 연속적으로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는 자료 구조.
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
C++ Espresso 제3장 배열과 포인터.
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++로 프로그래밍한다는 것의 의미 세상에서 가장 간단한 C++ 프로그램
ㅎㅎ C++ 프로그래밍의 첫 걸음 C++ 프로그래밍 기초 : 객체지향의 시작 C++로 프로그래밍한다는 것의 의미
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
컴퓨터 프로그래밍 기초 [Final] 기말고사
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
5장. 참조 타입.
명품 C++ 프로그래밍 2장. C++ 프로그래밍의 기본.
제 3장. C보다 나은 C++ II.
명품 C++ 7장 프렌드와 연산자 중복.
1. C++ 시작하기.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Power Java 제4장 자바 프로그래밍 기초.
C++ Espresso 제12장 템플릿.
파일 입출력 12.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
14. 예외처리.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
11장. 1차원 배열.
C#.
13. 연산자 오버로딩.
C 2장. C 프로그램 시작하기 #include <stdio.h> int main(void) { int num;
JA A V W. 03.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
27장. 모듈화 프로그래밍.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
영상처리 실습 인공지능연구실.
명품 C++ 프로그래밍 2장. C++ 프로그래밍의 기본.
24장. 파일 입출력.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
제 1장. C++ 시작하기.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
01_ C++ 스타일의 입출력 02_ C 스타일의 입출력
10. 문자열클래스와파일클래스.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
자바 5.0 프로그래밍.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
C++ Espresso 제11장 예외 처리와 형변환.
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
함수(Function) ◈ 함수의 개념 및 사용 이유 ◈ 함수 정의, 호출 및 선언 ◈ 지역변수와 전역변수 ◈ return 문
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
문자열 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
Chapter 2 C++ 함수와 네임스페이스. 최호성.
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
컴퓨터 프로그래밍 기초 - 9th : 배열 / 포인터 -
Numerical Analysis Programming using NRs
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
프로그래밍 개론 Ⅰ-실습 2장 데이터와 식①.
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
1장 C 언어의 개요 C 언어의 역사와 기원 C 언어의 특징 프로그램 과정 C 프로그램 구조 C 프로그램 예제.
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
어서와 C언어는 처음이지 제21장.
6 객체.
Presentation transcript:

명품 C++ 프로그래밍 2장. C++ 프로그래밍의 기본

예제 2-1: 기본적인 C++ 프로그램 /* 소스: SimpleC++.cpp cout과 << 연산자를 이용하여 화면에 출력한다. */ #include <iostream> // cout과 << 연산자 포함 // C++ 프로그램은 main() 함수에서부터 실행을 시작한다. int main() { std::cout << "Hello\n"; // 화면에 Hello를 출력하고 다음 줄로 넘어감 std::cout << "첫 번째 맛보기입니다."; return 0; // main() 함수가 종료하면 프로그램이 종료됨 } Hello 첫 번째 맛보기입니다.

주석문과 main() 함수 주석문 main() 함수 개발자가 자유롭게 붙인 특이 사항의 메모, 프로그램에 대한 설명 프로그램의 실행에 영향을 미치지 않음 여러 줄 주석문 - /* ... */ 한 줄 주석문 - //를 만나면 이 줄의 끝까지 주석으로 처리 main() 함수 C++ 프로그램의 실행을 시작하는 함수 main() 함수가 종료하면 C++ 프로그램 종료 main() 함수의 C++ 표준 모양 main()에서 return문 생략 가능 int main() { // main()의 리턴 타입 int ............ return 0; // 0이 아닌 다른 값으로 리턴 가능 } void main() { // 표준 아님 ............ } int main() { ............ // return 0; // 개발자의 편리를 위해 return 문 생략 가능 }

#include <iostream> 전처리기(C++ Preprocessor)에게 내리는 지시 <iostream> 헤더 파일을 컴파일 전에 소스에 확장하도록 지시 <iostream> 헤더 파일 표준 입출력을 위한 클래스와 객체, 변수 등이 선언됨 ios, istream, ostream, iostream 클래스 선언 cout, cin, <<, >> 등 연산자 선언 <iostream.h> 헤더 파일 구 버전의 C++ 표준에서 사용하던 헤더 파일 구 버전 컴파일러(Visual Studio 6.0)에서 사용 #include <iostream> .... std::cout << "Hello\n"; std::cout << "첫 번째 맛보기입니다.";

화면 출력 cout과 << 연산자 이용 cout 객체 << 연산자 <iostream> 헤더 파일에 선언 std 이름 공간에 선언: std::cout으로 사용 << 연산자 스트림 삽입 연산자(stream insertion operator) C++ 기본 산술 시프트 연산자(<<)가 스트림 삽입 연산자로 재정의됨 ostream 클래스에 구현됨 오른쪽 피연산자를 왼쪽 스트림 객체에 삽입 cout 객체에 연결된 화면에 출력 여러 개의 << 연산자로 여러 값 출력 std::cout << "Hello\n"; // 화면에 Hello를 출력하고 다음 줄로 넘어감 std::cout << "첫 번째 맛보기입니다."; std::cout << "Hello\n" << "첫 번째 맛보기입니다.";

<< 연산자 활용 문자열 및 기본 타입의 데이타 출력 다음 줄로 넘어가기 bool, char, short, int, long, float, double 타입 값 출력 연산식뿐 아니라 함수 호출도 가능 다음 줄로 넘어가기 ‘\n’ 사용 endl 조작자 사용 int n=3; char c=’#’; std::cout << c << 5.5 << ‘-’ << n << “hello” << true; #5.5-3hello1 std::cout << “n + 5 =” << n + 5; std::cout << f(); // 함수 f()의 리턴값을 출력한다. std::cout << “Hello” << ‘\n’; std::cout << “Hello” << std::endl;

예제 2–2 cout과 <<를 이용한 화면 출력 #include <iostream> double area(int r); // 함수의 원형 선언 double area(int r) { // 함수 구현 return 3.14*r*r; // 반지름 r의 원면적 리턴 } int main() { int n=3; char c='#'; std::cout << c << 5.5 << '-' << n << "hello" << true << std::endl; std::cout << "n + 5 = " << n + 5 << '\n'; std::cout << "면적은 " << area(n); // 함수 area()의 리턴 값 출력 true는 1로 출력됨 #5.5-3hello1 n + 5 = 8 면적은 28.26

printf()는 잊어라! cout과 <<를 사용하자.

이름 충돌 사례 우리 아파트에 여러 명의 마이클이 산다. 마이클을 부를 때, 1동::마이클, 2동::마이클로 부른다.

namespace 개념 이름(identifier) 충돌이 발생하는 경우 namespace 키워드 여러 명이 서로 나누어 프로젝트를 개발하는 경우 오픈 소스 혹은 다른 사람이 작성한 소스나 목적 파일을 가져와서 컴파일 하거나 링크하는 경우 해결하는데 많은 시간과 노력이 필요 namespace 키워드 이름 충돌 해결 2003년 새로운 ANSI C++ 표준에서 도입 개발자가 자신만의 이름 공간을 생성할 수 있도록 함 이름 공간 안에 선언된 이름은 다른 이름공간과 별도 구분 이름 공간 생성 및 사용(자세한 것은 부록 B 참고) 이름 공간 사용 이름 공간 :: 이름 namespace kitae { // kitae 라는 이름 공간 생성 ....... // 이 곳에 선언된 모든 이름은 kitae 이름 공간에 생성된 이름 }

? namespace kitae { int f(); void m(); } namespace mike { int f(); int g(); } kitae.h mike.h 이름 충돌 #include “mike.h” namespace kitae { int f() { return 1; } void m() { f(); mike::f(); namespace mike { int f() { return -1; } int g() { return 0; void f() { .... } void m() { ... f(); void f() { .... } int g() { ... ? mike.cpp mike.cpp kitae.cpp kitae.cpp (a) kitae와 mike에 의해 작성된 소스를 합치면 f() 함수의 이름 충돌. 컴파일 오류 발생 (b) 이름 공간을 사용하여 f() 함수 이름의 충돌 문제 해결

std:: 란? std std:: 생략 ANSI C++ 표준에서 정의한 이름 공간(namespace) 중 하나 <iostream> 헤더 파일에 선언된 모든 이름: std 이름 공간 안에 있음 cout, cin, endl 등 std 이름 공간에 선언된 이름을 접근하기 위해 std:: 접두어 사용 std::cout, std::cin, std::endl std:: 생략 using 지시어 사용 using std::cout; // cout에 대해서만 std:: 생략 ................................... cout << "Hello“ << std::endl; // std::cout에서 std:: 생략 std:: 생략 using namespace std; // std 이름 공간에 선언된 모든 이름에 std:: 생략 ................................... cout << "Hello" << endl; // std:: 생략 std:: 생략 std:: 생략

#include <iostream>과 std using namespace std;

예제 2-3 C++ 프로그램에서 키 입력 받기 #include <iostream> using namespace std; int main() { cout << "너비를 입력하세요>>"; int width; cin >> width; // 키보드로부터 너비를 읽어 width 변수에 저장 cout << "높이를 입력하세요>>"; int height; cin >> height; // 키보드로부터 높이를 읽어 height 변수에 저장 int area = width*height; // 사각형의 면적 계산 cout << "면적은 " << area << "\n"; // 면적을 출력하고 다음 줄로 넘어감 } 너비를 입력하세요>>3 높이를 입력하세요>>5 면적은 15

cin과 >> 연산자를 이용한 키 입력 스트림 추출 연산자(stream extraction operator) C++ 산술 시프트 연산자(>>)가 <iostream> 헤더 파일에 스트림 추 출 연산자로 재정의됨 입력 스트림에서 값을 읽어 변수에 저장 연속된 >> 연산자를 사용하여 여러 값 입력 가능 cout << "너비와 높이를 입력하세요>>“; cin >> width >> height; cout << width << ‘\n’ << height << ‘\n; 너비와 높이를 입력하세요>>23 36 23 36 width에 입력 height에 입력

<Enter> 키를 칠 때 변수에 값 전달 cin의 특징 입력 버퍼를 내장하고 있음 <Enter>키가 입력될 때까지 입력된 키를 입력 버퍼에 저장 도중에 <Backspace> 키를 입력하면 입력된 키 삭제 >> 연산자 <Enter>키가 입력되면 비로소 cin의 입력 버퍼에서 키 값을 읽어 변수에 전달

cin으로부터 키 입력 받는 과정(11.1절)

실행문 중간에 변수 선언 C++의 변수 선언 변수 선언은 아무 곳이나 가능 C++ 변수 선언 방식의 장점 변수를 사용하기 직전 선언함으로써 변수 이름에 대한 타이핑 오류 줄임 C++ 변수 선언 방식의 단점 선언된 변수를 일괄적으로 보기 힘듦 코드 사이에 있는 변수 찾기 어려움 int width; cin >> width; // 키보드로부터 너비를 읽는다. cout << "높이를 입력하세요>>"; int height; cin >> height; // 키보드로부터 높이를 읽는다. // 너비와 높이로 구성되는 사각형의 면적을 계산한다. int area = width*height; cout << "면적은 " << area << "\n"; // 면적을 출력하고 한 줄 띈다. 실행문 중간에 변수 선언

타이핑 오류 가능성 해소 선언부에 모든 변수를 선언하는 경우, 타이핑 오류 가능 변수 사용 전에 변수를 선언하면, 타이핑 오류 사전 발견 int time, timer; ... timer = 5; // time에 5을 저장하려다 timer로 잘못 입력. 컴파일 오류 발생하지 않음 // 그러나 잘못된 실행 결과 발생 .... timer = 3; int time; timer = 5; // time에 5을 저장하려다 timer로 잘못 입력. 컴파일 오류 발생 .... int timer; timer = 3; 컴파일 오류

C++ 문자열 C++의 문자열 표현 방식 : 2가지 C-스트링 방식 – ‘\0’로 끝나는 문자 배열 string 클래스 이용 다양한 멤버 함수 제공, 문자열 비교, 복사, 수정 등 C-스트링 문자열 char name1[6] = {‘G’, ‘r’, ‘a’, ‘c’, ‘e’, ‘\0’}; // name1은 문자열 “Grace” char name2[5] = {‘G’, ‘r’, ‘a’, ‘c’, ‘e’}; // name2는 문자열이 아니고 단순 문자 배열 단순 문자 배열 char name5[10] = “Grace”; name5[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] ‘G’ ‘r’ ‘a’ ‘c’ ‘e’ ‘\0’ “Grace” 문자열 ‘\0’로 초기화

C 언어에서 사용한 문자열 라이브러리 C-스트링으로 문자열 다루기 C 언어에서 사용한 함수 사용 가능 strcmp(), strlen(), strcpy() 등 <cstring>이나 <string.h> 헤더 파일 include <cstring> 헤더 파일을 사용하는 것이 바람직함 <cstring>이 C++ 표준 방식 #include <cstring> 또는 #include <string.h> ... int n = strlen("hello");

cin을 이용한 문자열 입력 문자열 입력 char name[6]; // 5 개의 문자를 저장할 수 있는 char 배열 cin >> name; // 키보드로부터 문자열을 읽어 name 배열에 저장한다. Grace 키 입력 name [0] [1] [2] [3] [4] [5] ‘G’ ‘r’ ‘a’ ‘c’ ‘e’ ‘\0’ “Grace” 문자열

예제 2–4 키보드에서 문자열 입력 받고 출력 #include <iostream> using namespace std; int main() { cout << "이름을 입력하세요>>"; char name[11]; // 한글은 5개 글자, 영문은 10까지 저장할 수 있다. cin >> name; // 키보드로부터 문자열을 읽는다. cout << "이름은 " << name << "입니다\n"; // 이름을 출력한다. } 이름을 입력하세요>>마이클 이름은 마이클입니다 빈 칸 없이 키 입력해야 함 이름을 입력하세요>>마 이 클 이름은 마입니다 빈 칸을 만나면 문자열 입력 종료

예제 2-5 C-스트링을 이용하여 암호가 입력되면 프로그램을 종료하는 예 #include <iostream> #include <cstring> using namespace std; int main() { char password[11]; cout << "프로그램을 종료하려면 암호를 입력하세요." << endl; while(true) { cout << "암호>>"; cin >> password; if(strcmp(password, "C++") == 0) { cout << "프로그램을 정상 종료합니다." << endl; break; } else cout << "암호가 틀립니다~~" << endl; strcmp() 함수를 사용하기 위한 헤더 파일 프로그램을 종료하려면 암호를 입력하세요. 암호>>Java 암호가 틀립니다~~ 암호>>C 암호>>C++ 프로그램을 정상 종료합니다. 빈 칸 없이 키 입력해야 함

cin.getline()을 이용한 문자열 입력 공백이 낀 문자열을 입력 받는 방법 cin.getline(char buf[], int size, char delimitChar) buf에 최대 size-1개의 문자 입력. 끝에 ‘\0’ 붙임 delimitChar를 만나면 입력 중단. 끝에 ‘\0’ 붙임 delimitChar의 디폴트 값은 ‘\n’(<Enter>키) char address[100]; cin.getline(address, 100, '\n'); 최대 99개의 문자를 읽어 address 배열에 저장. 도중에 <Enter> 키를 만나면 입력 중단 사용자가 ‘Seoul Korea<Enter>’를 입력할 때, address[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] ................ [99] ‘S’ ‘e’ ‘o’ ‘u’ ‘l’ ‘ ’ ‘K’ ‘r’ ‘a’ ‘\0’ ... "Seoul Korea" 문자열

예제 2–6 cin.getline()을 이용한 문자열 입력 #include <iostream> using namespace std; int main() { cout << "주소를 입력하세요>>"; char address[100]; cin.getline(address, 100, '\n'); // 키보드로부터 주소 읽기 cout << "주소는 " << address << "입니다\n"; // 주소 출력 } 주소를 입력하세요>>컴퓨터시 프로그램구 C++동 스트링 1-1 주소는 컴퓨터시 프로그램구 C++동 스트링 1-1입니다 빈칸이 있어도 <Enter> 키가 입력될 때까지 하나의 문자열로 인식

C++에서 문자열을 다루는 string 클래스 문자열의 크기에 따른 제약 없음 string 클래스가 스스로 문자열 크기게 맞게 내부 버퍼 조절 문자열 복사, 비교, 수정 등을 위한 다양한 함수와 연산자 제공 객체 지향적 <string> 헤더 파일에 선언 #include <string> 필요 C-스트링보다 다루기 쉬움

예제 2-7 string 클래스를 이용한 문자열 입력 및 다루기 #include <iostream> #include <string> using namespace std; int main() { string song("Falling in love with you"); // 문자열 song string elvis("Elvis Presley"); // 문자열 elvis string singer; // 문자열 singer cout << song + "를 부른 가수는"; // + 로 문자열 연결 cout << "(힌트 : 첫글자는 " << elvis[0] << ")?"; // [] 연산자 사용 getline(cin, singer); // 문자열 입력 if(singer == elvis) // 문자열 비교 cout << "맞았습니다."; else cout << "틀렸습니다. "+ elvis + "입니다." << endl; // +로 문자열 연결 } string 클래스를 사용하기 위한 헤더 파일 getline()은 string 타입의 문자열을 입력 받기 위해 제공되는 전역 함수 빈칸을 포함하는 문자열 입력 가능 Falling in love with you를 부른 가수는(힌트 : 첫글자는 E)?Elvis Pride 틀렸습니다. Elvis Presley입니다. 빈칸 포함

#include <iostream>와 전처리기 using namespace std; int main() { cout << "Hello\n"; cout << "첫 번째 맛보기입니다."; return 0; } ... ... ... <ios>헤더파일 ... ... #include <ios> ... <ostream>헤더파일 <ios> ... #include <ostream> <ostream> <istream>헤더파일 ... #include <istream> <iostream>헤더파일 <istream> <iostream> #include <iostream> using namespace std; int main() { cout << "Hello\n"; cout << "첫 번째 맛보기입니다."; return 0; } 전처리기(preprocessor) 컴파일 SimpleC++.cpp 확장된 SimpleC++.cpp

<iostream> 헤더 파일은 어디에? 컴파일러가 설치된 폴더 아래 include 폴더에 존재 C:\Program Files\Microsoft Visual Studio 10.0\VC\include

<iostream>과 <iostream.h>의 차이 구 표준의 C++ #include <iostream.h> 2003년 표준 이후 버전의 C++ #include <iostream> using namespace std; 헤더 파일의 확장자 비교

#include <헤더파일>와 #include "헤더파일" ‘헤더파일’을 찾는 위치 컴파일러가 설치된 폴더에서 찾으라는 지시 #include <iostream> <iostream> 헤더 파일은 컴파일러가 제공 #include “헤더파일“ 개발자의 프로젝트 폴더 개발자가 컴파일 옵션으로 지정한 include 폴더에서 찾도록 지시

<iostream> 헤더 파일 cin과 cout은 어디에 선언되어 있는가? cout이나 cin은 모두 <iostream>에 선언된 객체 <iostream> 헤더 파일