반응형
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++
반응형
'IT > 개발공부' 카테고리의 다른 글
C++ 언어 기초 (2) (흐름제어, 구조체, 클래스, 배열, 포인터, 메모리 할당, 참조) (0) | 2023.06.15 |
---|---|
C++ 언어 기초(1) (키워드, 식별자, 자료형, 상수, 변수, 연산자) (0) | 2023.06.14 |
java stream에 대해 알아보자 (0) | 2023.06.12 |
Java 패키지, 예외처리 (0) | 2023.06.08 |
Java 제네릭, 람다식 (0) | 2023.06.08 |