C++ (5)
Day 1
C와의 차이점
#include <stdio.h>
->#include <iostream>
- 형식지정자 필요없어짐
.h
사라짐- 호환은 가능
class
의 개념- object
bool
의 개념- C
- 참 : 0 이외의 값
- C++
- true : 1
- false : 0
- C
string
의 개념
Practice
practice.cpp
1 |
|
Output
1 | 1. a + b / 3 * 3 = 14 |
연산자
- 산술 연산자
*
,/
,%
+
,-
- 비트 이동 연산자
<<
,>>
- 관계 연산자
<
,<=
,>
,>=
==
,!=
- 논리 연산자
&&
||
Plus
plus.cpp
1 |
|
Output
1 | x = 10 |
Switch
switch.cpp
1 |
|
Continue & Break
continue_break.cpp
1 |
|
Day 2
Pointer
pointer1.cpp
1 |
|
Output
1 | Pointer of a : 0x7ffee6a4f958 == 0x7ffee6a4f958 |
pointer2.cpp
1 |
|
Output
1 | *(pa + 1) = 2 |
- 포인터는 상수 - 변경 불가
Function
function.cpp
1 |
|
Output
1 | 27 |
- Call by Value
- 값 복사 - 수정 불가
- 전역변수 - 누구든지 접근 가능
- Call by Address
- Call by Reference
call_by_value.cpp
1 |
|
Output
1 | a : 2 b : 3 |
call_by_address.cpp
1 |
|
call_by_reference.cpp
1 |
|
Output
1 | a : 2 b : 3 |
swap(int, int)
는 기본 제공 함수
배열
1 | int n[10]; // 정수 10개짜리 빈 메모리 공간 |
- 배열은 0부터 시작
- 함수에 매개변수로 전달 시 배열의 크기도 함께 전달
two_dimension_array.cpp
1 |
|
Output
1 | 1 0 0 0 0 |
Calling a Function with an Array as a Parameter
1 |
|
Output
1 | 배열 n의 합은 15입니다. |
- 배열이 함수의 파라미터로 들어갈 경우
int *a
int a[]
Const and Pointer
const_pointer.cpp
1 |
|
Output
1 | 10 |
const int *pNum
- 포인터 자체의 값이 상수int *const pNum
- 포인터가 가리키는 값이 상수
example.cpp
1 |
|
Output
1 | 인원수 : 42 37 83 33 |
String
getline.cpp
1 |
|
Output
1 | Falling in love with you를 부른 가수는(힌트 : 첫글자는 E)?Elvis Presley |
char
-' '
string
-" "
Quiz
quiz1.cpp
1 |
|
Output
1 | 문자열 입력>>Morning |
quiz2.cpp
1 |
|
Output
1 | 5개의 실수를 입력하라>>20.0 |
Day 3
Namespace
1 | namespace name{ // name이라는 이름 공간 생성 |
- 이름(Identifier) 충돌이 발생하는 경우
- 여러 명이 서로 나누어 프로젝트를 개발하는 경우
- 오픈 소스 혹은 다른 사람이 작성한 소스나 목적 파일을 가져와서 컴파일하거나 링크하는 경우
namespace
- 이름 충돌 해결
- 개발자가 자신만의 이름 공간을 생성할 수 있도록 함
std
- ANSI C++ 표준에서 정의한 이름 공간(
namespace
) 중 하나 <iostream>
- ANSI C++ 표준에서 정의한 이름 공간(
namespace.cpp
1 |
|
Output
1 | Radius Maximum = 100 |
String
cin.getline(char buf[], int size, char delimitChar)
- 공백이 낀 문자열을 입력 받는 방법
buf
에 최대size-1
개의 문자 입력(끝에\0
붙임)delimitChar
를 만나면 입력 중단(끝에\0
붙임)- Default :
\n
(Enter)
- Default :
string
클래스- 문자열의 크기에 따른 제약 없음
- 스스로 문자열의 버퍼 조정
- 문자열 복사, 비교, 수정 등을 위한 다양한 함수와 연산자 제공
- 객체 지향적
<string>
헤더 파일에 선선
- 문자열의 크기에 따른 제약 없음
cin_getline.cpp
1 |
|
Output
1 | 주소 입력 : ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇㅇ |
string_getline.cpp
1 |
|
Output
1 | 주소 입력 : asdfasdfasdfasdfasdfasdfasdfa |
search.cpp
1 |
|
Output
1 | 문자들을 입력하라 : Hello, World! |
Class & Object
1 | class Name{ |
class
- 상태 정보(속성) : 멤버 변수
- Action : 멤버 함수
- 객체를 만들어내기 위해 정의된 설계도, 틀
- 클래스는 객체가 아니며 실체도 아님
- Object
- 객체는 생성될 때 클래스의 모양을 그대로 가지고 탄생
- 멤버 변수와 멤버 함수로 구성
- 메모리에 생성, 실체(Instance)로도 불림
- Why
class
?- Encapsulation
public
- 외부에서 접근 가능
protectected
private
- 외부에서 접근 불가
- Default
- 캡슐화
- 클래스로 묶어둠
- Inheritance
- Polymorphism
- Encapsulation
circle.cpp
1 |
|
Output
1 | donut 면적은 3.14입니다. |
rectangle.cpp
1 |
|
Output
1 | 사각형의 면적은 15 |
Constructor
- 생성자
- 객체가 생성되는 시점에서 자동으로 호출되는 멤버 함수
- 생성자는 클래스의 이름과 같음
public
으로 선언
- 종류
- 기본 생성자
- 매개변수 없음
- 생성자가 없으면 컴파일러가 자동으로 만들어줌
- 사용자 정의 생성자
- 매개변수 존재
- 객체 생성 및 멤버 변수 초기값 정의
- 기본 생성자 자동 생성 X
- 기본 생성자
constructor.cpp
1 |
|
Output
1 | donut 면적은 3.14입니다. |
Quiz
quiz2.cpp
1 |
|
Output
1 | 높이는 1미터 |
Day 4
Class Practice
integer.cpp
1 |
|
Output
1 | 30 50 300 1 |
Destructor
1 | class name{ |
- 객체가 소멸되는 시점에서 자동으로 호출되는 함수
- 소멸자의 목적
- 객체가 사라질 때 마무리 작업을 위함
- 실행 도중 동적으로 할당 받은 메모리 해제, 파일 저장 및 닫기, 네트워크 닫기 등
- 소멸자는
return
불가 - 객체는 생성의 반대순으로 소멸
- 동적 메모리 할당 사용 시 소멸자 이용
destructor.cpp
1 |
|
Output
1 | 반지름 1 원 생성 |
접근 지정자
- 캡슐화의 목적
- 객체 보호, 보안
- C++에서 객체의 캡슐화 전략
- 객체의 상태를 나타내는 데이터 멤버(멤버 변수)에 대한 보호
- 중요한 멤버는 다른 클래스나 객체에서 접근할 수 없도록 보호
- 외부와으이 인터페이스를 위해서 일부 멤버는 외부에 접근 허용
- 멤버에 대한 3가지 접근 지정자
private
- 동일한 클래스의 멤버 함수에만 제한함
public
- 모든 다른 클래스에 허용, 외부함수(
main()
)도 허용
- 모든 다른 클래스에 허용, 외부함수(
protected
- 클래스 자신과 상속받은 자식 클래스에만 허용
Inline
- 짧은 함수의 다수 호출로 인해 오버헤드가 일어남
- 이를
inline
을 통해 해결 - 장점 : 시간 단축
- 단점 : 코드가 길어짐
- 클래스의 선언부에 구현된 멤버 함수는 자동
inline
함수
Program
- 바람직한 프로그램
main.cpp
class.h
: 클래스 선언부 - 헤더 파일(.h
)에 저장class.cpp
: 클래스 구현부 -.cpp
파일에 저장
- 클래스를 헤더 파일과
.cpp
파일로 분리하여 작성 - 목적 : 클래스 재사용
main.cpp
1 |
|
Box.h
1 |
|
Box.cpp
1 |
|
Output
1 | ********** |
Random
1 |
|
rand()
= $[0, 2^{15}-1]$
random.cpp
1 |
|
Output
1 | -- 0에서 2147483647까지의 랜덤 짝수 정수 10개 : |