Chapter 1 C와는 다른 C++. 최호성.

Slides:



Advertisements
Similar presentations
윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 01. C 언어 기반의 C++ 1.
Advertisements

명품 C++ 프로그래밍 3장. 클래스와 객체.
명품 C++ 4장. 객체 포인터와 객체 배열, 객체의 동적 생성.
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제1장 기초 사항.
C++ Espresso 제2장 제어문과 함수.
1장. 이것이 C 언어다.. 1장. 이것이 C 언어다. 1-1 C 언어의 개론적 이야기 프로그래밍 언어란 무엇인가? 컴파일이란 무엇인가? 사람과 컴파일러가 이해할 수 있는 약속된 형태의 언어 C 언어도 프로그래밍 언어 중 하나이다. 컴파일이란 무엇인가? 프로그래밍.
강좌명 : C++프로그래밍 (C++ Programming)
Chapter 6 구조체.
C# 05장. 메소드와 인자.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
제6장 객체배열과 벡터 객체 배열을 이해한다. 벡터(vector) 클래스를 사용할 수 있다.
명품 C++ 13장 예외 처리와 C 언어와의 링크 지정.
C++ Exspresso 제5장 클래스의 기초.
8. 객체와 클래스 (기본).
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C++ Espresso 제9장 다형성.
10장 템플릿과 표준 템플릿 라이브러리(STL)
배열, 포인터, 참조 배열은 같은 형을 가지는 변수들의 묶음이다..
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 14. 포인터와 함수에 대한 이해.
제15장 STL과 람다식 STL의 개념을 이해하고 사용할 수 있다. 람다식을 이해하고 사용할 수 있다.
C++ Espresso 제6장 생성자와 소멸자.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 02. 프로그램의 기본구성.
명품 C++ 7장 프렌드와 연산자 중복.
18장. 헤더 파일과 구현 파일 01_ 헤더 파일과 구현 파일의 사용.
14장. 함수 1 01_ 함수의 기본 02_ 인자의 전달.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C ++ 프로그래밍 시작.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
Chapter 1 C++ 기초 Copyright © 2010 Pearson Addison-Wesley. All rights reserved.
C++ Programming: chapter 7 – inheritence
프로그래밍2 및 실습 C언어 기반의 C++ 2.
배열이란? 배열의 선언? - 배열과 포인터의 관계? 문자열이란? 문자배열 연결 리스트
스택(Stack) 김진수
17장. 문자열 01_ 문자열 사용의 기본 02_ 문자열의 사용.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Chapter 3 클래스. 최호성.
제14장 예외처리와 템플릿 예외 처리의 개요를 학습한다. 예외 처리를 적용할 수 있다. 템플릿의 개념을 이해한다.
제5장 생성자와 접근제어 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
OpenCV 설치 및 구성 OpenCV
컴퓨터의 기초 제 2강 - 변수와 자료형 , 연산자 2006년 3월 27일.
타입, 연산자 Chapter 5, 6 Kum Deuk Kyu , Ph. D. Spring 2015
가상함수와 추상 클래스.
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
제 12장. 사용자 정의형으로서의 클래스 학기 프로그래밍언어및실습 (C++).
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
제 4장. 객체 지향 프로그래밍 시작하기 학기 프로그래밍언어및실습 (C++).
루프와 카운트 Looping and counting
문자열 처리하기 working with Strings
멤버 함수인 operator+()가 실행, 또는 전역 함수인 operator+()가 실행 Point p3 = p1+p2; 에서
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
C-언어와 기반구조 정보보호학과 이정수 교수.
5. 논리적 자료표현 : 구조체.
18장. 다차원 배열 그리고 포인터.
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
C++ Espresso 제13장 입출력과 파일처리.
4. 시간의 표현 (6장. 시간의 표현).
포인터와 배열 조 병 규 한 국 교 통 대 학 교 SQ Lab..
Chapter 2 C++ 함수와 네임스페이스. 최호성.
자료구조 세미나 발표 주제: 자료구조 기초 - 1회 차: 자료구조의 정의, 기초 지식 (함수, 포인터, 레퍼런스)
10장 템플릿과 표준 템플릿 라이브러리(STL)
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
argc, argv 의 사용방법 #include <stdio.h>
17장. 포인터의 포인터.
C.
Presentation transcript:

http://www.ilit.co.kr cx8537@naver.com 최호성

Chapter 1 C와는 다른 C++

인스턴스, auto, 참조형 변수, 범위 기반 for 1장의 핵심 개념 인스턴스, auto, 참조형 변수, 범위 기반 for 인스턴스 : 지금까지 배웠던 변수를 객체라는 다른 형식으로 다루는 것입니다. auto : 초깃값을 자료형에 맞춰 선언하는 인스턴스의 자료형을 자동으로 결정합니다. 참조형 변수 :포인터의 오류를 줄여주는 자료 다루기 방법입니다. 범위 기반 for : 특정 조건 없이도 반복문을 사용하도록 도와줍니다.

직관적으로 << 연산자가 가리키는 방향이 모두 std::cout으로 향하고 있다. HelloWorld로 본 C++ HelloCpp.cpp 직관적으로 << 연산자가 가리키는 방향이 모두 std::cout으로 향하고 있다. // HelloCpp.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include "stdafx.h" #include <iostream> int _tmain(int argc, _TCHAR* argv[]) { std::cout << "Hello, World" << std::endl; return 0; }

std::cout << "Hello, World" << std::endl; HelloWorld로 본 C++ std::cout << "Hello, World" << std::endl; std는 네임스페이스(Namespace)라고 하며 개념상 ‘소속’으로 생각하면 됩니다. ::은 범위 지정 연산자 혹은 스코프 설정 연산자(Scope resolution operator)이다. cout은 콘솔 출력을 담당하는 객체이다. 결과적으로 “std에 속한 cout 객체에 “Hello, World” 문자열과 endl 객체를 ‘넘겨(<<)’ 문자열을 화면에 출력해달라.”라는 의미로 요약할 수 있다.

Instance의 사전적 의미는 ‘예시’ 혹은 ‘경우’이다. 인스턴스와 입출력 흐름 Instance의 사전적 의미는 ‘예시’ 혹은 ‘경우’이다. 사람 철수, 영희; : 철수와 영희는 각각 사람이라는 형식에 대한 인스턴스이다. 미인 전지현; :전지현은 미인이라는 개념의 예시이다. int a; : a는 int 형식에 대한 인스턴스이다. string strData; : strData는 string 형식에 대한 인스턴스이다.

자료형을 cout 객체가 알맞은 자료형을 선택해 출력한다. std::out CoutSample.cpp 자료형을 cout 객체가 알맞은 자료형을 선택해 출력한다. #include "stdafx.h" #include <iostream> int _tmain(int argc, _TCHAR* argv[]) { std::cout << 10 << std::endl; std::cout << 10U << std::endl; std::cout << 10.5F << std::endl; std::cout << 10.5 << std::endl; std::cout << 3 + 4 << std::endl; return 0; }

std::cin >> instance #include "stdafx.h" #include <string> #include <cstdio> #include <iostream> int _tmain(int argc, _TCHAR* argv[]) { int nAge; std::cout << "나이를 입력하세요." << std::endl; std::cin >> nAge; char szJob[32]; std::cout << "직업을 입력하세요." << std::endl; std::cin >> szJob; std::string strName; std::cout << "이름을 입력하세요." << std::endl; std::cin >> strName; std::cout << "당신의 이름은 " << strName << "이고, " << "나이는 " << nAge << "살이며, " << "직업은 " << szJob << "입니다." << std::endl; return 0; }

변수의 선언 및 정의 int a = 10; int a(10); int b(a); 형식 변수명(초깃값); int a = 10; :이와 같은 형식은 C언어의 변수 선언 및 초기화 형식이다. C언어와의 호환을 위해 지원하는 형식일 뿐 C++ 코드는 아니다. int a(10); : C++ 스타일의 인스턴스 선언 및 초깃값 정의 형식이다. int b(a); : C++ 스타일의 인스턴스 선언 및 초깃값 정의 형식이며, b는 a의 복사본으로 생성한다는 의미이다.

초깃값의 형식에 맞춰 선언하는 인스턴스의 형식이 ‘자동’으로 결정된다. auto auto 변수명(초깃값); 초깃값의 형식에 맞춰 선언하는 인스턴스의 형식이 ‘자동’으로 결정된다. #include "stdafx.h" #include <iostream> int main(void) { int a = 10; int b(a); auto c(b); std::cout << a + b + c << std::endl; return 0; }

new는 생성(동적 할당), delete는 소멸(해제) 연산자이다. : ‘형식’에 대한 인스턴스 하나(한 개)를 동적 생성한다. 내부적으로 대상 형식의 생성자를 호출한다. delete 변수이름 : new 연산자로 동적 할당한 것은 반드시 delete로 삭제한다. 내부적으로 대상 형식의 소멸자를 호출한다. 형식 *변수이름 = new [요소개수]; : 여러 인스턴스를 동적 생성할 때는 배열로 생성한다. delete [] 변수이름 : 배열로 생성한 것은 반드시 배열로 삭제해야 한다.

new와 delete 연산자 NewDeleteSample.cpp delete pData; delete pNewData; #include "stdafx.h" #include <iostream> int _tmain(int argc, _TCHAR* argv[]) { // 인스턴스만 동적으로 생성하는 경우 int *pData = new int; // 초깃값을 기술하는 경우 int *pNewData = new int(10); *pData = 5; std::cout << *pData << std::endl; std::cout << *pNewData << std::endl; delete pData; delete pNewData; }

new와 delete 연산자 배열로 생성한 것은 반드시 배열로 삭제한다. #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { // 객체를 배열 형태로 동적 생성한다. int *arr = new int[5]; for (int i = 0; i < 5; ++i) arr[i] = (i + 1) * 10; cout << arr[i] << endl; // 배열 형태로 생성한 대상은 반드시 배열 형태를 통해 삭제한다! delete[] arr; return 0; }

참조자 형식은 포인터와 구조적으로 비슷하고 반드시 선언과 동시에 초기화 해야 한다. 형식 &이름 = 원본 인스턴스; 참조자 형식은 포인터와 구조적으로 비슷하고 반드시 선언과 동시에 초기화 해야 한다. #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int nData = 10; // nData 변수에 대한 참조자 선언 int &ref = nData; // 참조자의 값을 변경하면 원본도 변경된다! ref = 20; cout << nData << endl; // 포인터를 쓰는 것과 비슷하다. int *pnData = &nData; *pnData = 30; return 0; }

형식 &이름 = 원본 인스턴스; 매개변수가 참조자면 호출자 코드만으로는 매개변수가 참조자라는 것을 알 수 없다. 참조자 형식 형식 &이름 = 원본 인스턴스; 매개변수가 참조자면 호출자 코드만으로는 매개변수가 참조자라는 것을 알 수 없다. #include "stdafx.h" #include <iostream> using namespace std; // 매개변수가 int에 대한 참조 형식이다. void TestFunc(int &rParam) { // 피호출자 함수에서 원본의 값을 변경했다. rParam = 100; } int _tmain(int argc, _TCHAR* argv[]) int nData = 0; // 참조에 의한 인수 전달이다. TestFunc(nData); cout << nData << endl; return 0;

형식 &이름 = 원본 인스턴스; 매개변수가 참조자면 피호출자 함수에서 원본을 변경할 수 있다. 참조자 형식 형식 &이름 = 원본 인스턴스; 매개변수가 참조자면 피호출자 함수에서 원본을 변경할 수 있다. // 참조 전달이므로 호출자 변수의 값을 변경할 수 있다. void Swap(int &a, int &b) { int nTmp = a; a = b; b = nTmp; } int _tmain(int argc, _TCHAR* argv[]) int x = 10, y = 20; // 참조 전달이며 두 변수의 값이 교환된다. Swap(x, y); return 0;

형식 &&이름 = r-value; 연산의 임시결과는 상수이며 보통 이 임시결과에 대해 r-value 참조를 선언한다. int TestFunc(int nParam) { ... } int _tmain(int argc, _TCHAR* argv[]) int nInput = 0; cout << "Input number: "; cin >> nInput; // 산술 연산으로 만들어진 임시 객체에 대한 r-value 참조 int &&rdata = nInput + 5; cout << rdata << endl; // 함수 반환으로 만들어진 임시 객체에 대한 r-value 참조 int &&result = TestFunc(10); // 값을 변경할 수 있다. result += 10; return 0;

반복 횟수는 배열 요소 개수에 맞춰 ‘자동’으로 결정된다. 범위 기반 for문 for(auto 요소변수 : 배열이름) 반복구문; 반복 횟수는 배열 요소 개수에 맞춰 ‘자동’으로 결정된다. int _tmain(int argc, _TCHAR* argv[]) { int aList[5] = { 10, 20, 30, 40, 50 }; ... // 범위 기반 C++11 스타일 반복문 // 각 요소의 값을 n에 복사한다. for(auto n : aList) cout << n << ' '; cout << endl; // n은 각 요소에 대한 참조다. for(auto &n : aList) return 0; }