ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 01. C++ 기초사항
    C++ 2021. 1. 21. 11:11

     

    C++ 기초 사항

     

    - 프로그램 구조

    • main 함수
      • 프로그램의 진입점(entry point)
    • #include
      • 외부 프로그램 소스를 포함시키는 메크로
    • iostream
      • 입출력 관련 기본 라이브러리
      • std 네임스페이스를 정의
    • ::
      • 스코프 연산자
      • 어디에 정의된 것인지 지정할 때 사용
    • using namespace
      • 네임스페이스 생략을 위해 지정 (std::cout -> cout)

       


     

    < ex01_hello.cpp >

     

    #include <iostream>
    // # 붙으면 c++에선 추상의미 전처리를 하라! preprocessing
    // <iostream> 모듈! 인클루드가 파이썬에서 쓰는 용어로 import 
    // 입출력과 관련된 모듈(c++에선 라이브러리라고 부름)
    
    using namespace std;
    // standard 표준 의미
    // 기본으로 namespace std로 쓰겠다
    
    int main(int argc, char const *argv[]) // 괄호에 매개변수 있으면 함수
    // 파이썬에선 def, c++에선 바로 함수 명을 이용해서 정의내림
    // 데이터타입을 사전에 명시해줘야 함, 정의한 데이터타입만 사용할 수 있음
    //함수의 리턴타입도 명시해줘야 함 -> 지금 보는 데에선 int
    // 변수도 데이터 타입 명시해줘야 함
    { // 파이썬에선 코드블럭을 들여쓰기로 했지만 c++에선 중괄호{} 이용해서 코드블럭 지정
        cout << "Hello I am Jonga" << endl;
        // cout(console out), 데이터의 값을 출력할 때 사용하는 객체
        // << -> 데이터 전송하겠다 그 옆에 전송할 데이터 적어준다
        // 이 데이터를 cout으로 보내라(왼쪽객체에게)
        // 또 전송할 데이터가 있다면 <<를 또 쓰면 된다
        // endl -> 줄 바꾸는 상수
        std::cout << "Hello I am Jonga" << std::endl << "종아";
        // cout의 사용법은 두 가지
        // cout은 std라는 namespace에 정의되어 있음, using문 안 써줬다면 이렇게 적어줘야 함
        return 0;
        // int로 리턴한다고 했으니! 데이터타입 일치해야 함
        // 이 함수의 실행을 끝내겠다는 의미로 리턴
    }
    
    // 모든 언어에서는 이름충돌이 생기기 마련이다
    // c++에선 namespace로 이름충돌 다룬다
    // cout이라는 식별자는 std의 범주 아래 정의하고 있는 것
    // std::cout -> 다른::cout이 아니라 std에서 정의한 cout이다
    
    // 코드러너로 실행 -> ctrl + alt + N
    
    // ex01_hello.cpp:16:5: error: 'cout' was not declared in this scope
    // using namespace 안 쓰면 생기는 오류, cout이 어디 소속인지 모르겠다
    
    // 코드를 실행하면 .exe라는 실행파일이 생긴다
    // 파이썬과 c++ 차이, 파이썬은 소스를 매번 파이썬이 실행시키는 방식
    // c++은 컴파일해서 .exe를 만들어준다
    

     

     


     

    < ex02_cout.cpp >

     

    #include <iostream>
    using namespace std;
    
    int main(int argc, char const *argv[]){
    
        cout << 10;
        cout << "개의 사과가 있습니다" << endl;
    
        cout << 10 << "개의 사과가 있습니다 ";
    
        return 0;
    }

     


     

    < ex03_variable.cpp >

     

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    int main(int argc, char const *argv[])
    {
        int i;
        i = 1000;
        // int i = 1000;
        // int i {1000};
    
        cout << i << endl;
    
        string s {"hello"}; // string s = "hello";
        cout << s << endl;
        return 0;
    }

     

    • c++에선 문자열 표현할 때, 무조건 큰따옴표 ""로 묶어줘야 한다 (파이썬과 다르게 작은따옴표 안 된다'')
    • c++에선 세미콜론;이 나와야 문장이 끝났다는 것

     

    primitive datatype(기본데이터 타입)

     

    자료형 설명바이트수

    정수형 short short형 정수 2
      int 정수 4
      long long형 정수 4
      long long 64비트 정수 8
    문자형 char 문자 및 정수 1
    부울형 bool 참이나 거짓을 나타낸다 1
    부동소수점형 float 단일정밀도 부동소수점 4
      double 두배정밀도 부동소수점 8
      long double 두배정밀도 부동소수점 8

     


     

    < ex04_boolean.cpp >

     

    #include <iostream>
    using namespace std;
    
    int main(int argc, char const *argv[])
    {
    bool b;
    b = true;
    
    cout <<  b << endl;
    
    b  = false;
    cout << b;
    
    return 0;
    
    }

     

    • boolean
      • true / false만 가질 수 있는 타입

        • true -> 0이 아닌 모든 값, 일반적으로 1로 표현
        • false -> 0

     

    < ex05_char.cpp >

     

    #include <iostream>
    using namespace std;
    
    int main(int argc, char const *argv[])
    {
    char ch;
    ch = 'a';
    
    cout << ch;
    
    // ch = 'ab'; -> error
    // ch = "a"; -> error
    // ch = ''; -> error
    return 0;
    }

     

    • 컴파일되려면 적어도 문법에러(context error)가 없어야 한다

    • char
      • 글자 하나를 저장하는 데이터 타입
      • 작은 따옴포로 묶어서 글자 표현

     

    < ex06_string.cpp >

     

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(int argc, char const *argv[]){
        
        string s1 = "Good";
        string s2 = "Morning";
        string s3 = s1 + " " + s2 + "!";
    
        cout << s3 << endl;
    
        string s4 = "Good";
        string s5 = "good";
        bool b = (s4 == s5); 
        cout << b << endl;
    
        return 0;
    }

     

    string

    • 가장 적합한 데이터타입을 선정해야 한다
    • string은 라이브러리의 객체로 지원된다, 기본데이터타입이 아니다
    • 문자열을 저장하는 데이터 타입
    • +연산자로 문자열 결합 가능
    • ==로 내용 비교 가능

     

    < ex07_const.cpp >

     

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(int argc, char const *argv[])
    {
        const double TAX_RATE = 0.25;
        int income = 1000;
        income = income - TAX_RATE * income;
        cout << income << endl;
    
        return 0;
    }

     

    • const

      • 한 번 초기화하면 수정 불가

      • 관례로 대문자로 이름 지정

      • 상수 정의

      • const를 바꾸려고 하면 문법오류(신텍스?)가 난다 -> 실행파일이 안 만들어진다

         

    에러에는 두 가지

    문법오류, 런타임에러가 있다

     


     

    < ex08_auto.cpp >

     

    #include <iostream>
    #include <string>
    using namespace std;
    
    auto add(int x, int y){
        return x + y;
    }
    
    int main(int argc, char const *argv[]){
        auto d = 1.0;
        auto sum = add(3, 4);
    
        cout << d << " " << sum << endl;
        return 0;
    }

     

    • auto

      • 데이터타입을 직접 기입하는 것이 아니라 코드를 컴파일러가 분석해서 자동으로 결정할 때 사용하는 것이 auto

       

    • 함수 안에 선언된 변수, 지역변수

    • 함수 밖에 선언된 변수, 전역변수

       


     

    < ex09_cout.cpp >

     

    #include <iostream> 
    #include <string>
    
    using namespace std;
    
    int main(int argc, char const *argv[]) { 
    int i = 100;
    cout << "변수 i의 값은 "; cout << i; cout << "입니다.";
    cout << endl; cout << "변수 i의 값은 " << i<< "입니다." << endl;
    // 연속사용 가능
    return 0; 
    }

     

    • cout

      • 객체

      • c(consol : 디폴트 입출력장치(키보드, 모니터))

      • << (오른쪽의 데이터를 콘솔로 보내라)

      • 연속 작업 사용 가능

         


     

    < ex10_cin.cpp >

     

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(int argc, char const *argv[]){
        int i;
        cout << "integer : ";
        cin >> i;
    
        double d;
        cout << "double : ";
        cin  >> d;
        
        cout << i << " " << d << endl;
        return 0;
    
    }

     

    • cin

      • 콘솔로부터 값을 입력받는 객체

      • 변수의 데이터타입에 따라 자동으로 형변환해준다

      • 데이터가 오른쪽으로 흘러가는 느낌 (>>)

         

    • cin에서 선언한 데이터타입이 아닌 것을 입력했을 경우

      • 런타임에러가 난다
      • 지금 내가 입력하는 데이터타입을 신경써야 한다

     

    < ex11_cin.cpp >

     

    #include <iostream> 
    #include <string> 
    
    using namespace std;
    
    int main(int argc, char const *argv[]) { 
    string name;
    cout << "이름을 입력하세요: ";
    cin >> name; cout << name << "을 환영합니다." << endl;
    return 0; 
    }

     

     


     

    < ex12_op.cpp >

     

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(int argc, char const *argv[]){
        int x = 100;
        int y = 200;
    
        int result = x + y;
        cout << "x+y : " << result << endl;
        cout << "x-y : " << x - y << endl;
        cout << "x/y : " << x / y << endl;
        cout << "x/y : " << x /(double)y << endl;
        cout << "x % 3 : " << x % 3 << endl;
        cout << 1/2 << endl;
        cout << 1/2. << endl;
    
        return 0;
    }

     

    • 연산자

      • / 조심 -> 정수 / 정수 = 정수 (실수로 나오지 않는다)

      • ex) 1/2 => 0.5이지만 c++에서는 데이터타입이 고정되어 있기 때문에

      • 정수 / 정수는 결과도 정수이다

      • 0.5를 강제로 정수 0으로 만든다(소수점 나머지 버린다)

      • 다른말로 말하면 몫연산

      • / 의 결과값을 실수로 받고 싶다면 피연산자의 값을 float 혹은 double로 바꿔주면 된다

         

     


     

    < ex13_incdec.cpp >

     

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(int argc, char const *argv[]){
        int x = 100;
        x++;
        cout << x << endl;
    
        x--;
        cout << x << endl;
    
        cout << ++x << endl;
        cout << x++ << endl;
        cout << x << endl;
        cout << --x << endl;
        cout << x-- << endl;
        cout << x << endl;
        return 0;
    }

     

    print

    101 100 101 101 102 101 101 100

     

    • 증감연산자(변수 앞, 뒤에 붙는 경우에 따라서 달라짐)

      • ++ : 현재 값에서 1 증가
      • -- : 현재 값에서 1 감소

    'C++' 카테고리의 다른 글

    04. 클래스와 객체  (0) 2021.01.27
    [열혈 C++] 02. C언어 기반의 C++ 2  (0) 2021.01.22
    [열혈 C++] 01. C언어 기반의 C++ 1  (0) 2021.01.22
    03. 제어구조와 배열2  (0) 2021.01.22
    02. 제어와 배열  (0) 2021.01.21

    댓글

Designed by Tistory.