1강. C++ 시작하기
추천글 : 【C++】 C++ 목차
1. C++과 java의 비교 [본문]
2. C++ 실행하기 [본문]
3. C++ 구성요소 [본문]
4. C++ 문법 [본문]
a. GitHub
1. C++과 java의 비교 [목차]
⑴ C++는 Java보다 빠름
⑵ java가 이용되는 분야
① data structure
② algorithm
③ introduction to data mining
④ mobile computing and its application
⑶ C++이 이용되는 분야 : 빠른 속도를 요하는 분야, memory 처리
① system programming
② frequent memory allocation
③ operating system
④ computer graphic
⑤ compiler
2. C++ 실행하기 [목차]
⑴ 일반적인 프로세스
① 1st. .h, .cpp 확장자로 C++ 소스 코드 작성
② 2nd. g++ compiler를 이용하여 binary file을 생성시킴
③ 3rd. output file을 실행시킴
⑵ command 예시
$ g++ -o main main.cpp
$ ./main
Hello World!
⑶ CLion과 CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(problems)
set(CMAKE_CXX_STANDARD 17)
add_executable(test TEST.cpp app.cpp app.h supplementary.cpp supplementary.h)
add_executable(main main.cpp app.cpp app.h supplementary.cpp supplementary.h)
① problems : 프로젝트 이름으로 임의로 지정할 수 있음
② test : main 함수를 가지고 있는 TEST.cpp와 app.cpp 등을 linking하여 하나의 실행 단위로 만든 것
③ main : main 함수를 가지고 있는 main.cpp와 app.cpp 등을 linking하여 하나의 실행 단위로 만든 것
3. C++ 구성요소 [목차]
⑴ library (.h 파일)
① 정의 : 함수 선언을 모아 놓은 것
② 내용 : 함수의 리스트 정의, class 정의
③ 목적
○ C++는 definition order가 중요하기 때문에 미리 선언할 필요가 있음
○ .cpp 파일로 만들어진 오브젝트 파일에 있는 함수들을 다른 소스 파일에서도 사용할 수 있게 하기 위함
○ 청사진(blueprint) 역할
④ 문법 : #include <cstdio>
⑤ 일반적으로 header (.h) 파일에서는 선언을 하고 body (.cpp) 파일에서 구현을 함
○ header에서 구현해도 사실 큰 상관은 없음
○ header에서 구현을 하는 경우 redefinition을 피하기 위해 body에서 구현을 하면 안 됨
○ library에서 구현을 하면 compiler의 사전적 디버깅 기능이 제공되지 않을 수 있음
○ header에서 구현을 하지 않는 경우 반드시 .cpp에서 구현을 해야 함
○ 구현을 굳이 하지 않아도 컴파일 에러 및 런타임 에러가 크게 발생하지는 않음
○ 생성자 관련하여 에러가 종정 발생함
○ 예 : undefined reference to ...
⑥ 자기가 만든 header 파일은 "myHeader.h"와 같이 씀
⑵ implementation (.cpp 파일)
① 내용 : 함수의 body를 정의
② 문법
○ 반드시 같은 이름의 .h 파일을 include 해야 함
○ 예 : #include "MyHeader.h"
③ main function
○ C++는 main function에만 return이 생략될 수 있음
○ 위와 같이 생략되는 경우 run-time에서 자동으로 return 0;가 추가됨
○ (참고) java의 경우 main function이 class에 소속돼 있는데 C++은 global function
⑶ namespace
① package와 유사한 개념으로 library의 집합
② 목적 : function의 name conflict를 방지하기 위함
③ 문법 : using namespace std;
④ C++에서 namespace는 std와 프로그래머가 정의한 namespace만 존재함 ⑤ (참고) 다른 프로그래밍 언어에서는 다양한 namespace가 존재함
⑷ 변수(variable)와 함수(function)
① C++에서 class의 member가 아닌 변수와 함수가 존재함
○ java에서 모든 변수와 함수는 class의 member임
○ 이를 각각 global variable과 global function이라고 함
○ main 함수는 global function의 가장 대표적인 예
② 함수 정의 시 parameter에 변수명을 생략해도 됨
int sum1(int a){ return 1; } // possible
int sum2(int){ return 2; } // possible in C++, impossible in java
③ const
○ primitive variable : const 위치에 따라 의미가 다르지 않음
int const x1 = 3;
const int x2 = 3;
○ method
const int MyClass::showName(string id){ ... }
int MyClass::showName(string id) const { ... }
○ const가 앞에 붙어 있는 경우 : const int를 return하는 뜻이지만 copy 개념이므로 그냥 int를 return
○ const가 함수의 끝에 붙어 있는 경우 : member variable의 값을 바꾸지 않을 것임을 표시
○ member variable에 mutable이 붙어 있으면 const가 함수의 끝에 붙어 있어도 값을 바꿀 수 있음
○ (참고) 포인터 변수인 경우 : const 위치에 따라 의미가 다름
const Object* obj; // can't change data (value)
Object* const obj; // can't change pointer (address)
const Object* const obj; // can't change data or pointer
○ class의 member들이 바뀌지 않을 것임을 표시한 것
○ member의 값을 바꾸려고 할 경우 compile error를 띄워서 코딩 실수를 방지함
○ (참고) java의 final의 경우 variable은 비슷한 개념이지만, method는 override가 안됨을 표시한 거라 차이가 있음
○ (주석) pointer에 있어서 const의 대상은 거꾸로 이해해야 하는 느낌
④ auto
○ 함수를 통해 return 된 결과로 변수를 생성할 때 따로 data type을 고려하지 않고 auto라는 type으로 표시해도 됨
4. C++ 문법 [목차]
⑴ primitive variable
① #7.3f : 소수점을 포함하여 총 7개의 공간을 할당
○ 123.45 → 123.45
○ 123.4567 → 123.4567
② precision은 연산이 모두 일어난 후 출력 시에만 소수점 자릿수를 맞추는 것
③ type casting
○ C++는 widening type casting과 narrowing type casting 모두 가능
○ java에서는 implicit narrowing casting을 금지함
○ C++에는 dynamic_cast, static_cast, reinterpret_cast, const_cast 등 explicit type conversion이 가능
④ typeid : java에서 typeof와 비슷
⑵ random number
std::srand(std::time(nullptr))
// std::time(nullptr) -> current time;
// std::srand(seed) -> set seed of the std::rand() function
⑶ array
① 변수 이름 뒤에 bracket [ ]을 씀
② C++은 C 처럼 malloc, calloc 같은 것으로 array의 size를 뒤늦게 할당할 수 있음
⑷ 매크로(macro)
① 정의 : 컴파일 타임에 코드를 자동으로 대체하는 기능. 변수 메모리 할당이 일어나지 않음
② 예시
#define SUB(x,y) x-y
#define PRINT(x) cout << x << endl;#undef PI // delete macro
⑸ inline function
① inline function이 호출되는 시점에 inline function의 전체 코드가 대체됨
② inline function은 일종의 요청으로 compiler가 그 요청을 받아들일 때만 코드의 대체가 일어남
⑹ typedef : type name이 긴 경우 이를 축약하는 데 유용함
⑺ iostream, cstdio
① 라이브러리
○ #include <iostream.h> : C++ 스타일인 std::cin, std::cout을 include할 때 사용
○ #include <cstdio.h> : C 스타일인 scanf, printf를 include할 때 사용
○ 일반적으로 C++ 스타일의 cin/cout을 쓰지만, formatting이 필요할 때는 printf도 사용함
② istream& : std::cin 등이 있음
○ cin >> x; : >>라는 연산자를 overriding하여 x의 자료형에 맞게 입력을 기다림
○ getline(istream& cin, std::string str); : 한 줄 한 줄 읽을 때 유용
③ scanf
○ 배열의 크기를 넘어서도 입력이 됨
○ 예외처리가 엄청 많이 필요하기 때문에 쓰지 않는 것을 추천
⑻ File I/O
① ofstream : file을 생성하고 쓰기 연산을 수행함
② ifstream : file로부터 읽어들임
③ fstream : ofstream과 ifstream의 기능을 모두 구현. file에 대힌 생성, 읽기, 쓰기 연산을 모두 수행함
④ 예외 처리
○ exception을 handle하지 않아도 됨
○ file이 존재하지 않으면 프로그램이 비정상적으로 끝나므로 read하기 전에 file이 있는지 check해야 함
⑤ 예제 1. 파일 읽기
#include <iostream>
#include <fstream>
using namespace std;
int main() {
string str;
ifstream my_file("filename.txt");
while (getline(my_file, str)) {
cout << str << endl;
}
my_file.close();
}
⑥ 예제 2. 파일 쓰기
#include <iostream>
#include <fstream>
using namespace std;
int main() {
// Create and open a text file
ofstream my_file("filename.txt");
// Write to the file
my_file << "Files are fun!" << endl;
my_file.close(); // Close the file
}
입력: 2020.11.18 12:14
'▶ 자연과학 > ▷ C, C++' 카테고리의 다른 글
【C++】 3강. OOP 1부 (0) | 2020.11.21 |
---|---|
【C++】 2강. 포인터 (0) | 2020.11.21 |
【코딩】 C 언어로 이항계수 (0) | 2016.06.27 |
【코딩】 C 언어로 콜라츠의 추측 (0) | 2016.06.27 |
【코딩】 C 언어로 행렬식 (0) | 2016.06.27 |
최근댓글