본문 바로가기

IT/개발공부

C++ 언어의 개요 (처음 C++ 배우기!)

반응형

 

 

1. C++ 언어의 개요

C++ : C언어를 확장하여 만든 프로그래밍 언어 

주요 확장 내용

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

 

 

 

2. C++ 프로그램의 작성 및 빌드

소스 프로그램 파일과 헤더파일이 필요함.

 

소스 프로그램 파일

  • 처리하고자 하는 작업을 수행하는 C++ 프로그램 명령어들을 담고있는 파일
  • 확장자 : '.cpp', '.cxx', '.C' 등

헤더파일

  • (꼭 만들어야 하는 것은 아니지만 유용함)
  • 클래스, 함수의 원형, 매크로, 전영변수, 상수 등 여러 소스 파일에 공통적으로 선언되는 내용을 담고 있는 파일
  • 단독으로 컴파일되지 않고, #include라는 선행처리기 지시어에 의해 소스 프로그램 파일에 삽입되어 함께 컴파일됨
  • 확장자 : '.h', '.hpp' 등

 

소스 파일헤더파일이 컴파일 되면 목적 파일(.obj)로 바뀐다. 

여러 목적 파일라이브러리를 하나로 합쳐주는 것을 링크 작업이라고 한다. 링크작업을 통해 실행 프로그램 파일(.exe)이 만들어 진다.

소스 + 헤더  -> 컴파일 -> 목적 파일

목적 파일 + 라이브러리 -> 링크작업 -> 실행 프로그램 파일

이 전반적인 과정을 빌드라고 함.

 

빌드에 필요한 도구

  • 소스 프로그램 및 GUI 등의 편집기
  • 컴파일러
  • 링커
  • 디버깅 도구

-> 이러한 도구들을 통합개발환경(IDE)라고 함 (ex. visualstudio, eclipse, codeblocks 등) (window에선 visualstudio가 좋음)

 

 

 

3. C++ 프로그래밍

예제 소스 프로그램FirstStep.cpp

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

int main(){						//main 함수
	std::count << "hello, world"			// "hello, world"가 cout을 통해 출력됨
      		  << std::end1;				// 행의 끝이라는 뜻 (이 다음부턴 아랫줄로 넘어감)
    return 0;
}

표준 출력 스트림으로 문장을 출력하였다.

 

#으로 되어있는 문장은 컴파일 하기 앞서서 무엇가를 하라는 지시이다. (선행처리)

선행처리란?

  • C++ 프로그램을 컴파일하기 전에 소스 프로그램을 가공하여 컴파일러가 실제로 번역할 소스 프로그램을 만드는 것
  • 선행처리 지시어로 처리
    • '#' 으로 시작
    • 한 행에 한 개의 문장을 작성
    • C++ 표준 라이브러리에서 가져올 때는 '< >'를 사용
    • 이외에는 따옴표("") 사용해서 위치 지정
  • 대표적인 선행처리
    • 헤더파일 삽입 : #include
    • 매크로 선언 및 해제 : #define, #undef
    • 조건부 컴파일 : #if, #ifdef, #ifndef
  • <iostream> : C++ 표준 라이브러리에서 제공하는 헤더 파일 (표준 입출력과 관련)

 

함수

  • main 함수가 프로그램의 시작임

 

 

입출력 스트림

std::cout 객체

  • 표준 출력 스트림 객체
  • 데이터를 문자열로 변환하여 출력함
  • 출력 연산자 (삽입 연산자) : <<

std::cin 객체

  • 표준 입력 스트림 객체
  • 문자열을 입력변수의 자료형의 값으로 변환하여 입력함
  • 입력 연산자 (추출 연산자) : >>
  • 백색 공백 문자(빈간 or 탭)는 구분 문자로 취급됨

std::cin 예)

int a;
char str[100];
std::cin >> a >> str;

//사용자가
//10 Hello
//를 입력하게 되면 -> 10을 a에 저장하고 Hello를 str에 저장한다.

 

 

 

명칭공간

명칭공간이란?

특정한 명칭들이 인식되는 프로그램의 부분.

다른 영역의 명칭 선언과 무관하게 명칭공간 내에서 자유롭게 명칭을 선언하여 사용할 수 있다.

//명칭공간 정의
namespace myNSpc{
	int count;		//명칭을 선언하는 문장
}

//명칭공간 외부에서는 소속 명칭공간을 지정하여 사용해야 한다.
myNSpc::count = 0;
  • 동일한 명칭이라도 서로 다른 명칭공간에서 정의되었다면 별개의 것으로 구분한다. -> 여러 프로그래머가 작성한 프로그램을 결합하여 완성된 프로그램을 만들 경우 각자 필요한 명칭을 독립적으로 만들어 사용 가능
  • 전역 명칭 공간 : 특정 명칭공간에 속하지 않는 기본 명칭공간
  • std 명칭공간 : 표준 C++ 라이브러리의 명칭들이 정의되어 있는 명칭 공간
  • 'using'을 이용하여 명칭공간을 사용할 수 있다.
    • 특정 명칭공간이나 명칭공간 내의 특정 이름을 자주 사용하는 경우 명칭공간 지정을 간소화 할 수 있다. 

 

명칭공간 사용 예)

#include <iostream>

namespace NameSpace1{ int a = 10; }
namespace NameSpace2{ int a = 20; }
int a = 30;					//전역 명칭 공간
namespace NameSpace1{ int b = 50; }		//위의 NameSpace1과 같은 명칭공간임

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

이 예제에 using을 넣게되면

#include <iostream>
using namespace std;

namespace NameSpace1{ int a = 10; }
namespace NameSpace2{ int a = 20; }
int a = 30;					//전역 명칭 공간
namespace NameSpace1{ int b = 50; }		//위의 NameSpace1과 같은 명칭공간임

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

이렇게 쓸 수 있다.

 

 

 

 

 

[참고]

방송통신대학교 C++

반응형