[C++] 기본 구조 & 표준 입출력

꿈별·2022년 6월 16일

C++

목록 보기
1/27

✔소스코드 기본 구조

// 예시O 필수X
#include
#define

int main()
{
 명령문;
 return;
}

main 함수

  • C++ 프로그램의 초기 진입점으로 제일 먼저 호출된다.

    모든 C++ 프로그램은 main 함수를 가진다.


return

  • 함수 종료를 의미하며, 함수를 호출한 곳으로 결과를 반환한다.

  • main 함수 반환 시 프로그램이 종료된다.


  • 전처리기, 선행처리기(Preprocessor)
    : 컴파일러가 코드를 컴파일하기 전에, 프로그램 전체에 영향을 미치는 코드를 처리하는 작업을 의미한다.

전처리문, 선행처리문

: 전처리기에 의해 처리되는 명령어, #로 시작한다.

#include문

: 외부에 선언된 함수나 상수 등을 사용하기 위해서 헤더 파일의 내용을 현재 파일에 포함시킨다.
-> 전처리기가 지정해둔 헤더 파일을 열고, 전처리문이 작성된 위치에 그대로 복붙한다.

  • C언어는 헤더 파일에 .h 확장자를 사용하지만
    C++은 사용하지 않는다.
    -> 기존 C언어 헤더 파일 이름 앞에 c를 추가해서 C++ 스타일 헤더 파일로 변환 할 수 있다.
#include <math.h> // C, C++ 모두 가능
#include <cmath> // C++ 스타일

  • 매크로(Macro)
    : 명령문이나 표현식을 나타내는 식별자를 의미한다. 보통 대문자로 쓴다.
    ( = 어떠한 명령에 이름 붙인 것 )

#define문

: 매크로를 정의할 때 사용된다.
아래 예시처럼 객체형 매크로 외에 함수처럼 동작하는 함수형 매크로도 만들 수 있다.

// 예시
#define SIZE 100

int main() 
{
	// [출력] 배열 크기 : 100 
	std::cout << "배열 크기 : " << SIZE; 
    // 크기가 100인 정수 배열 생성
    int array[SIZE] = {};
}

네임스페이스

  • 이름이 소속된 공간

  • C언어엔 없는 기능

  • C++ 프로그램 작성 시 발생하는 이름 충돌을 방지 ( 함수 이름 겹쳐도 충돌 안 함 )

  • 표준 라이브러리의 변수/함수들은 std 네임스페이스에 포함되어 있다.
    -> 표준 라이브러리를 사용할 때, std:: 접두어를 붙임으로써
    std:: 뒤의 정의가 std라는 네임스페이스에 존재한다는 것을 컴파일러에게 알려준다.

// 예시
std::cout << num << std::endl;
  • :: 연산자는 범위 지정 연산자 혹은 스코프 설정 연산자라고 하며
    어떠한 네임스페이스를 가리킬 때 사용한다.

✔표준 입출력 클래스

  • C++의 모든 것은 객체로 표현되므로, 입출력을 담당하는 수단도 C언어처럼 함수가 아니라 모두 객체이다.

  • iostream 헤더 파일에 표준 입출력 클래스가 정의되어 있다.

  • cout : 출력 / cin : 입력

  • C언어처럼 printf, scanf 함수로도 입출력이 가능하다.


cout

  • 출력 담당 객체

  • iostream 클래스의 인스턴스라고 할 수 있다.

  • C언어의 %d, %f 처럼 출력할 타입을 지정하지 않아도 cout 객체가 알맞은 자료형을 선택해서 출력해준다.

  • << 연산자로 문자열들을 붙여준다.


cin

  • 입력 담당 객체

  • cout와 반대로 >> 연산자 사용


endl

  • << 연산자 사용

  • c의 '\n' 과 비슷한 역할 but 완전히 똑같진 않다.

  • 기능)

    • 줄바꿈 문자를 삽입해 커서가 다음 줄의 시작부분으로 이동하게 한다
    • 출력 함수의 끝을 알린다
    • 출력 버퍼를 비운다

버퍼 비워줄 필요 없고, 단순히 줄바꿈 기능만 필요한 것이라면
\n 을 입력하는 게 효율적이다.


✔출력

  • C : printf / C++ : cout

  • 표준 헤더 파일 iostream 내의 정의를 사용하는 예제
    : std 네임스페이스에 속한 cout 객체에 TEXT로 정의한 문자열과 endl 객체를 넘기고 문자열을 출력한다.

#include <iostream>
#define TEXT "C++ Study"

int main()
{
   std::cout << TEXT; << endl;
   return 0;
}

더 간단한 출력?

  • 매번 앞에 std:: 붙여주기 귀찮다면

-> using namespace std; 명령문을 추가한다.

#include <pch.h>
#include <iostream>

// std 네임스페이스에 속한 정의는 네임스페이스 이름 붙이지 않아도 사용 가능해짐
using namespace std;

int main()
{
   cout << "Hello World!" << endl;
   return 0;
}

주의)

  • 위처럼 작성하면 std 네임스페이스를 전부 사용하겠다는 의미가 된다.
    그러면 네임스페이스를 사용하는 의미가 없어진다.

  • 귀찮더라도 std::cin, std::cout 처럼 하나하나 접두어를 붙여서 사용해 주자.
    (코딩문제 풀이를 할 때는 그냥 using namespace std; 그대로 쓰고 있다.


주석

  • // : 한 줄 주석

  • /*주석 내용*/ : 여러 줄 주석

  • 여러 줄 주석 안에 한 줄 주석 삽입 : 가능

  • 여러 줄 주석 안에 여러 줄 주석 중첩 : 불가능


인스턴스

  • C언어 변수와 같은 개념

  • 예시) int number; 에서 number는 int 자료형에 대한 인스턴스이다.

  • 객체지향 프로그래밍에서는 모든 것을 객체로 표현하며, 객체의 형식을 갖는 변수를 인스턴스라고 부른다.

클래스 / 객체 / 인스턴스

매우 간단명료한 비유를 발견했다. (출처)

클래스 ) 붕어빵 틀
객체 ) 틀로 찍어낸 모든 붕어빵 (그 개념 자체를 의미)
인스턴스 ) 맛도 구워진 정도도 각기 다른 붕어빵(들)
-> 객체를 인스턴스화한 결과
-> 팥붕어빵, 슈크림붕어빵, 아이스크림붕어빵, ...



참고)
http://www.tcpschool.com/cpp/cpp_intro_program
매크로
매크로 함수
매크로와 #include, #define
https://gdnn.tistory.com/161
https://www.epnc.co.kr/news/articleView.html?idxno=52113
클래스 객체 인스턴스

0개의 댓글