TIL) C++ - 언어 소개

oatraspberry·2023년 9월 27일
post-thumbnail

🌼C++

1979년 Bell 연구소의 Bjarne Stroustrup이 C 언어를 확장하여 만든 프로그래밍 언어

  • 객체지향 프로그래밍: 클래스, 상속, 다형성, 동적 바인딩 등
  • 일반화 프로그래밍: 템플릿
  • 예외처리

📂소스 파일**

🤍소스 프로그램 파일

  • 처리하고자 하는 작업을 수행하는 C++ 프로그램 명령어를 담고 있는 파일
  • 파일 확장자: .cpp, .css, .C 등을 사용한다.

🤍헤더파일

  • 클래스, 함수의 원형, 매크로, 전역변수, 상수 등 여러 소스 파일에 공통적으로 선언되는 내용을 담고 있는 파일
  • 단독으로 컴파일되지 않고, #include라는 선행처리기 지시어에 의해 소스 프로그램 파일에 삽입되어 함께 컴파일된다.
  • 확장자: .h, .hpp 등을 사용한다.

📂빌드

소스파일 -> 컴파일 -> 목적 파일 + 라이브러리 -> 링크 -> 실행 프로그램 파일(.exe)


📂C++ 소스 프로그램

//FirstStep.cpp

#include <iostream>

int main() {
	// 표준 출력 스트림으로 문장을 출력함
    std::cout << "첫 C++ 프로그램"
    		  << std::end1;
    return 0;
}

🤍C++에서 주석(comment)을 작성하는 방법

  1. /**/ 사이에 문장을 작성한다.
/* 주석 작성 방법1*/
  1. // 이후의 문장은 주석이다.
// 주석 작성 방법2

📂선행처리

🤍선행처리란?

1) C++ 프로그램을 컴파일하기 전에 소스 프로그램을 가공하여 컴파일러가 실제로 번역할 소스 프로그램을 만드는 것
2) 선행처리기 지시어(preprocessor directives)로 처리를 지시한다.
- 선행처리기 지시어는 #으로 시작한다.
- 선행처리기 지시어 문장은 한 행에 한 개의 문장을 작성한다.
3) 대표적인 선행처리
- 헤더파일 삽입: #include
- 매크로 선언 및 해제: #define, #undef
- 조건부 컴파일: #if, #ifdef(만약 정의가 되어있으면), #ifndef(만약 정의가 되어있지 않으면)

🤍선행처리의 지시

#include <iostream> // 선행처리기 지시어

int main() {

}

🤍선행처리의 예 - 헤더파일 삽입

// a.cpp
#include "a.h"
문장_1;
문장_2;
문장_3;

// a.h
문장_h1;
문장_h2;
문장_h3;

// 선행처리 결과
문장_h1;
문장_h2;
문장_h3;
문장_1;
문장_2;
문장_3;
//FirstStep.cpp

#include <iostream>

int main() {
	// 표준 출력 스트림으로 문장을 출력함
    std::cout << "첫 C++ 프로그램"
    		  << std::end1;
    return 0;
}

🤍<>"" 차이

  1. <>: 표준 라이브러리에서 가져올 때 사용
  2. "": 파일의 위치를 직접 지정할 때 사용

📂문장

  • 하나의 문장은 단어와 연산자, 숫자, 문자, 문자열, 문장 부호, 빈칸 등을 정해진 문법에 따라 나열하여 작성한다.
  • 문장의 끝에는 세미콜론(;)을 기입하여 구분한다.
std::cin >> a;
aSquare = a * a;

🤍블록(block)

  • 한 개 이상의 문장을 중괄호{} 안에 나열하여 묶어 놓은 것
  • 여러 개의 문장을 하나의 문장처럼 취급하거나 함수의 몸체를 구성하기 위해 사용한다.
if (a > b) {
	auto tmp = a;
    a = b;
    b = tmp;
}

📂함수

🤍함수의 구성

//FirstStep.cpp

#include <iostream>

int main() { // 함수의 머리부

	// 표준 출력 스트림으로 문장을 출력함
    std::cout << "첫 C++ 프로그램"
    		  << std::endl;
    return 0;
}

📂입출력 스트림

🤍std::cout 객체

  • 표준 출력 스트림 객체
  • 데이터를 문자열로 변환하여 출력한다.
  • 출력 연산자(삽입 연산자): <<
std::cout << "첫 C++ 프로그램";
int a = 10;
std::cout << "a의 값은 ";
std::cout << a << "입니다." << std::endl;

🤍std::endl 객체

  • end of line

🤍std::cin 객체

  • 표준 입력 스트림 객체
  • 문자열을 입력 변수의 자료형의 값으로 변환하여 입력한다.
  • 입력 연산자(추출 연산자): >>
  • 백색 공백 문자(빈칸, 탭, 새줄 문자)는 구분 문자로 취급한다.
int a;
char str[100];
std::cin >> a >> str;

📂명칭공간

  • 특정한 명칭들이 인식되는 프로그램의 부분
  • 다른 영역의 명칭 선언과 무관하게 명칭공간 내에서 자유롭게 명칭을 선언하며 사용할 수 있다.
    namespace myNSpce {
    	int count; // 명칭을 선언하는 문장 나열
    }
  • 명칭공간 외부에서는 소속 명칭공간을 지정하여 사용해야 한다.
    myNSpc::count = 0;
  • 동일한 명칭이라도 서로 다른 명칭공간에서 정의되었다면 별개의 것으로 구분한다 ➡️ 여러 프로그래머가 작성한 프로그램을 결합하여 완성된 프로그램을 만들 경우 각자 필요한 명칭을 독립적으로 만들어 사용할 수 있다.
  • 전역 명칭공간: 특정 명칭공간에 속하지 않는 기본 명칭공간
  • std 명칭공간: 표준 C++ 라이브러리의 명칭들이 정의되어 있는 명칭공간
#include <iostream>

namespace NameSpace1 {
	int a = 10; 
}
namespace NameSpace2 {
	int a = 20;
}
int a = 30; // 전역 명칭공간
namespace NameSpace1 {
	int b = 50;
}

int main() {
	int a = 40; // 지역변수
	std::cout << NameSpace1::a << std::endl; // 10
    std::cout << NameSpace2::a << std::endl; // 20
    std::cout << ::a << std::endl; // 30
    std::cout << a << std::endl; // 40
    std::cout << NameSpace1::b << std::endl; // 50
    return 0;
}

🤍using을 이용한 명칭공간 사용

  • 특정 명칭공간이나 명칭공간 내의 특정 이름을 자주 사용하는 경우 명칭공간 지정을 간소화 할 수 있다.
    using namespace std;
#include <iostream>
using namespace std;
namespace NameSpace1 {
	int a = 10; 
}
namespace NameSpace2 {
	int a = 20;
}
int a = 30; // 전역 명칭공간
namespace NameSpace1 {
	int b = 50;
}

int main() {
	int a = 40; // 지역변수
	cout << NameSpace1::a << endl; // 10
    cout << NameSpace2::a << endl; // 20
    cout << ::a << endl; // 30
    cout << a << endl; // 40
    cout << NameSpace1::b << endl; // 50
    return 0;
}
profile
개발자가 될테야

0개의 댓글