본문 바로가기

Contact English

【C++】 1강. C++ 시작하기

 

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 intreturn하는 뜻이지만 copy 개념이므로 그냥 intreturn

○ 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::coutinclude할 때 사용

○ #include <cstdio.h> :스타일인 scanf, printfinclude할 때 사용

○ 일반적으로 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