728x90
황기태 저자의 명품 C++ Programming 개정판을 읽고 학습한 내용을 정리한 포스트입니다!
https://search.shopping.naver.com/book/catalog/32436115747
/*
C++ 프로그래밍 기본
cout 으로 출력하기
*/
#include <iostream> // cout과 << 연산자 포함
// c++ 프로그램은 main() 함수에서부터 실행을 시작한다.
int main() {
std::cout << "hELLO\n";
std::cout << "2번째 줄";
return 0; // main 함수가 종료하면 프로그램이 종료됨
}
/*
실행결과
hELLO
2번째줄
*/
위의 예제를 바탕으로 기초적인 부분을 살펴보자
주석
- 실행에 영향 xx
- 한 줄 주석 => // 내용입력
- 여러 줄 주석 => /* 내용 입력 */
main() 함수
- c++ 프로그램의 시작점이므로, 반드시 하나의 main() 함수가 존재해야 하며, 종료시 프로그램이 종료된다.
- c++ 표준 리턴타입 = int 이고 void는 표준이 아니다.
- main 함수는 예외적으로 return 문을 생략 가능
#include <iostream>
- 전처리기(C++ Preprocessor)에 대한 지시문
- 소스 파일을 컴파일하기 전, <iostream> 헤더 파일을 읽어 c++ 소스 파일 안에 삽입할 것을 지시
- iostream 헤더 파일에는 C++ 표준 입출력을 위한 클래스와 객체가 선언되어 있음 => 키보드 입력이나 화면 출력을 위해 꼭 필요
화면 출력
- cout 객체
- c++ 표준 출력 스트림 객체(standard output stream object)
- c++ 프로그램에서 출력한 데이터를 자신과 연결된 스크린에 대신 출력해준다. (std 접두어 => cout의 이름 공간이 std임을 표시)
- << 연산자
- 스트림 삽입 연산자(stream insertion operator)로 불리며, 오른쪽 피연산자 데이터를 왼쪽 스트림 객체에 삽입
- 본래는 정수를 왼쪽으로 쉬프트하는 기본 연산자이지만, 출력 스트림에 데이터를 삽입하는 삽입 연산자로 <iostream> 헤더 파일에 '연산자 오버로딩'되어 cout과 함께 사용
화면에서 다음 줄로 넘어가기
- \n
- << 연산자가 \n 문자를 cout의 스트림 버퍼에 단순히 삽입하고 끝난다.
- 이후 cout 스트림 버퍼가 꽉 차거나 강제 출력 지시가 있는 경우, cout은 \n을 해석하여 커서를 다음 줄로 넘김
- endl()
- <iostream> 헤더 파일에 작성되어 있는 함수
- std::cout << std::endl;이 실행되면 << 연산자가 endl() 함수를 호출
- endl() 함수는 \n을 cout의 스트림 버퍼에 넣고, cout에게 현재 스트림 버퍼에 있는 데이터를 즉각 장치에 출력하도록 지시
- 즉, endl을 사용하면 커서를 다음 줄로 넘기는 것과 동시에 현재 cout의 스트림 버퍼에 있는 모든 데이터를 출력 => 버퍼를 비운다.
시간적 측면에서 보면 버퍼를 비우지 않는 \n이 유리하지만 상황에 따라 잘 사용해야 한다.
이름 공간(namespace와 std::)
- 프로젝트를 여러 명이 나누어 개발하거나, 다른 사람이 작성한 소스 코드나 목적 파일을 가져와서 하용하는 경우 identifier(이름)이 충돌하는 경우가 있다.
- 프로젝트를 여러 명이 나누어 개발하는 경우, 한 개발자가 작성한 클래스, 상수, 변수, 함수의 "이름"이 같은 팀의 다른 개발자가 작성한 이름과 동일하면, 함께 컴파일하거나 링크할 때 오류가 발생할 수 있고, 이를 수정하는데 상당한 시간과 노력이 든다.
- 또는 오픈 소스를 가져와 개발자가 작성한 프로그램과 함께 컴파일 하는 경우에도 이름 충돌의 문제가 발생한다.
- 프로젝트를 여러 명이 나누어 개발하는 경우, 한 개발자가 작성한 클래스, 상수, 변수, 함수의 "이름"이 같은 팀의 다른 개발자가 작성한 이름과 동일하면, 함께 컴파일하거나 링크할 때 오류가 발생할 수 있고, 이를 수정하는데 상당한 시간과 노력이 든다.
- c++ 표준에서는 개발자가 자신만의 고유한 이름 공간을 생성할 수 있도록 namespace 키워드 도입 => 서로 다른 이름 공간 안에 선언된 이름들은 별개의 이름으로 취급되는 것
// A.h
...
namespace A{
int f();
void m();
}
...
// A.cpp
#include "B.h"
namespace A{
int f(){
return 1;
}
void m(){
f(); // A.cpp에 구현된 f() 함수
B::f(); // B.cpp에 구현된 f() 함수
}
}
// B.h
...
namespace B{
int f();
int g();
}
...
// B.cpp
namespace B{
inf f(){
return -1;
}
int g(){
return 0;
}
}
- 위와 같이 namespace 키워드를 사용하여 자신만의 공간을 만들 수 있다.
- 함수 f()의 충돌을 방지하기 위해 각 이름 공간에서 선언해주었고, B::f()를 통해 A공간에서 B공간의 f() 함수를 호출한다.
std::와 using 지시어
- std는 C++ 표준 이름 공간
- 따라서, 표준 라이브러리에서 선언된 이름을 사용시 std::를 붙여야됨.
- 매번 std::를 붙이기 번거롭기에 using 지시어를 사용하여 생략할 수 있다.
using namespace std;
using namespace std::cout;
- std::cout만 생략할 수도, std 이름 공간에 선언된 모든 이름을 생략할 수도 있다.
키 입력 받기
- cin 객체
- c++ 표준 입력 스트림 객체이므로 #include <iostream> 작성 필수
- 모든 기본 타입에 대해 >> 연산자로 데이터 입력이 가능 => c언어와는 달리 주소 값이 아닌 변수 이름 그대로 받아야됨
- >> 연산자
- 스트림 추출 연산자
- 왼쪽 피연산자인 스트림 객체로부터 데이터를 읽어 오른쪽 피연산자에 삽입
- << 연산자와 마찬가지로 연산자 오버로딩
실행문 중간에 변수 선언
- c와 마찬가지로 c++에서도 프로그램 어디서나 변수 선언이 가능하며 몇 가지 장점이 존재
- 변수를 사용하는 코드 바로 위에 선언 => 가독성이 좋아진다.
- 변수를 사용하기 바로 전 라인에 변수를 선언하면, 변수 이름을 잘못 타이핑하는 실수를 줄일 수 있음
- for 문과 같이 필요한 곳에 변수(int n)을 선언하여 사용가능
for (int n=0; n<10; n++)
cout << n;
- 다만 선언된 변수들이 코드 사이에 흩어져 있어, 선언된 변수를 한 눈에 보기 힘들고, 코드 사이에서 선언된 변수를 찾기가 용이하지 않다는 단점도 존재한다.
현재 책에서는 기본적인 연산, 변수 선언 방법, 함수, 조건문 등에 대해 다루지 않지만 홈페이지에 가면 기초를 볼 수 있다.
따라서, 기초적인 문법에 관한 부분은 구글에 검색해서 찾아보는 것을 추천합니다..!
728x90
'Programming Language > C++' 카테고리의 다른 글
[C++] 생성자 (1) | 2023.11.27 |
---|---|
[C++] 클래스와 객체 (1) | 2023.11.27 |
[C++] 키보드로 문자열 입력 및 헤더 파일에 관해서 (1) | 2023.11.27 |
[C++] 특징과 객체 지향 프로그래밍 (1) | 2023.11.27 |
[C++] C++ 시작하기 (1) | 2023.11.27 |