C++ 01 : cout, cin 표준 입출력, std::와 namespace

728x90

C++ 01 : cout, cin 표준 입출력, std::와 namespace

#include <iostream> // 라이브러리 가져올 때는 <>, 직접 만든 라이브러리 가져올 때는 ".h"

int main() { // C와 동일하게 main()만 실행됨. 프로젝트 하나에 main함수는 하나만 존재해야 함.
    std::cout << "Hello, world!" << std::endl; // endl로 개행. ""내에서 \n으로도 개행 가능.
    return 0; // main함수 내에서는 생략 가능
    /*
        앙
    */
}

int void main() {}는 비표준 방법이므로 컴파일러에 따라 에러가 나는 경우가 있다.

주석은 C, C++, Java 모두 형식이 동일하다.

 

#include <iostream>

전처리기(C++ Preprocessor)에게 내리는 지시

<iostream> 헤더 파일을 컴파일 전에 소스에 확장하도록 지시함

 

<iostream> 헤더 파일

표준 입출력을 위한 클래스, 객체, 변수 등이 선언되어 있음.

ios, istream, ostream, iostream 클래스 선언, cout, cin, <<, >>>등 포함.

 

cout 객체

객체 : 메모리에 자리잡은 클래스 (함수가 아니므로 괄호를 넣지 않는다.)

표준 C++ 출력 스트림 객체

사용자의 화면에 값을 출력하도록 한다.

 

<< 연산자

스트림 삽입 연산자

C에서 비트 shift 연산자로 사용되었던 것이 스트림 삽입 연산자로 재정의 되었다.

오른쪽 피연산자를 왼쪽 스트림 객체에 삽입하도록 한다.

 

cout 객체에 연결된 화면에 출력하도록 한다.

함수를 호출할 수도 있다.

여러 개를 사용할 수도 있다.

#include <iostream> 

int main(){
    std::cout << "안녕" << "하세요?" << std::endl;
    return 0; 

}

 

 

<< 연산자 활용

문자열 및 기본 타입의 데이터를 출력하도록 함.

(bool, char, short, int, long, float, double)

* C언어에서는 참 거짓을 0, 1로 판별했으나, C++은 bool을 이용해 true, false로 판별이 가능해졌다.

물론 C언어와 호환되는 언어이므로 0, 1로도 판별이 가능하다.

 

#include <iostream> 

int main(){
    char dong = 'B';
    int n2 = 103;
    std::cout << "은마 아파트 " << dong << "동" << n2 << "호" << true << std::endl;
    return 0; 

}

 

true, false는 1, 0으로 출력된다.

 

 

C++ 함수 사용법

#include <iostream> 
double area(int r);  // 함수 원형을 먼저 선언

int main(){
    int n = 5;
    std::cout << "반지름이 " << n << "인 원의 넓이는 : " << area(5) << std::endl;
    // 함수 원형을 선언하지 않았다면 area()함수가 뭔지 컴파일러가 인식할 수 없음
    return 0; 
}

double area(int r){
    return 3.14 * r * r;
}

 

#include <iostream> 
double area(int r){  // 아예 함수 자체를 main 앞에 박아버려도 무방함
    return 3.14 * r * r;
}

int main(){
    int n = 5;
    std::cout << "반지름이 " << n << "인 원의 넓이는 : " << area(5) << std::endl;
    return 0; 
}

 

 

namespace

C++내의 예약어(keyword), 식별자(identifier)와의 충돌로 인한 문제점을 해결하기 위해 제시된 방법

(ex : 변수명을 char, int, double, if, continue 으로 선언해서 생기는 충돌 문제

여러 명이 서로 나누어 프로젝트를 개발하거나 다른 사람이 작성한 소스를 가져와 컴파일 할 때 변수 간 충돌 문제)

 

namespace는 개발자가 자신만의 이름 공간을 생성하도록 하여 다른 이름 공간과 별도의 구분이 가능하도록 한다.

 

std::

C++ 표준에서 정의한 namespace중 하나로, <iostream>에서 선언된 모든 것이 std namespace내에 존재한다.

(cout, cin, endl등)

이를 사용하려면 std::cout, std::cin, std::endl과 같은 방법으로 접두어를 붙여줘야 했다.

 

그러나 using을 사용하면 접두어를 생략하여 사용할 수 있다.

using std::cout;  // cout에 대해서만 std::를 생략

cout << "Hello" << std::endl;

 

using namespace std; // std 이름 공간에 선언된 모든 이름에 std::를 생략

cout << "Hello" << endl; 

 

namespace 활용법

 

cin 연산자

표준 입력 장치인 키보드를 연결하는 C++ 입력 스트림 객체

사용자에게 키 입력을 유도한다.

 

cin은 입력 버퍼를 내장하고 있다.

enter키가 입력될 때까지 입력된 키를 입력 버퍼에 저장한다.

만약 backspace키를 입력 하면 입력된 키가 삭제된다.

 

>> 연산자 사용

>> : 스트림 추출 연산자

입력 스트림에서 값을 읽어 변수에 저장하도록 한다. (cout은 <<)

<<와 마찬가지로 연속으로 >> 을 사용해 여러 값을 연속적으로 입력하도록 만들 수 있다. (이 경우 스페이스 바로 입력값을 구분한다.)

enter키가 입력되면 cin의 입력 버퍼에서 키 값을 읽어 변수에 전달하도록 한다.

#include <iostream> 
using namespace std;

double area(int w, int h){
    return w * h;
}

int main(){
    int width, height;
    cout << "직사각형의 가로와 세로의 길이는? : ";
    cin >> width >> height;
    cout << "직사각형의 넓이는 : " << area(width, height) << endl;
    return 0; 
}

728x90