[CPP Module] 00

정영현·2023년 9월 10일

기록의 이유

CPP 과제를 하면서 각 과제에서 중요하게 생각한 점과 배운점을 정리하기 위해 기록을 시작한다.

ex00

  • 프로그램에 들어온 인자들의 알파벳을 모두 대문자로 하여 출력하는 과제

  • cpp를 간단하게 시작해보는 과제 (like Hello World)

  • 사용 함수

    extern std::ostream cout
    • 정확하게 함수는 아니지만 표준 입출력 스트림인 cin과 cout을 필수적으로 사용해야 한다. 사용 법만 알아도 사용하는데 큰 불편함이 없지만, cout이 어떻게 작동하는지 알고 싶어서 조금 더 공부해봤다.

    • 표준 입출력 스트림의 계층도
      표준 입출력 스트림의 계층도

    • 계층도 istreamostream 부분에 istreamostreambasic_istream, basic_ostream에 속한 것을 확인할 수 있고, ostreamistream의 구체화 객체가 cincout임을 확인할 수 있다.

    • cincoutConsole in, Concole out이다.

    • iomanip(입출력 조정자)에 속한 setw()setfill() 함수는 ex01과 ex02에서 활용하였다.

    • 직접 iostream를 확인해보면 cincout이 객체임을 코드로 확인할 수 있다.

      _LIBCPP_BEGIN_NAMESPACE_STD
      
      extern _LIBCPP_FUNC_VIS istream cin;
      extern _LIBCPP_FUNC_VIS ostream cout;
      extern _LIBCPP_FUNC_VIS ostream cerr;
      extern _LIBCPP_FUNC_VIS ostream clog;
      
      #ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
      extern _LIBCPP_FUNC_VIS wistream wcin;
      extern _LIBCPP_FUNC_VIS wostream wcout;
      extern _LIBCPP_FUNC_VIS wostream wcerr;
      extern _LIBCPP_FUNC_VIS wostream wclog;
      #endif
    int std::toupper(int ch);
    • 지정된 문자를 대문자로 변환하여 반환한다.
    • ch : 변환할 문자

ex01

과제

  • PhoneBook class와 Contact class를 주어진 기능을 수행할 수 있도록 생성하고 사용해보는 과제
  • class와 멤버변수, class의 함수를 사용해보는 과제

개념

클래스 (class)

  • c에 구조체의 개념에 객체지향성을 입힌 개념
  • 멤버 변수
    • 클래스 안의 범위에서 사용되는 변수
  • 멤버 함수
    • 클래스 안에서 정의된 함수
  • static
    static은 일반 지역변수가 저장되는 스택(stack)영역이 아닌 data영역에 저장되어 같은 클래스의 모든 객체가 공유하게 된다.
    • static으로 선언한 변수는 0으로 초기화 된다.
    • static 변수는 외부참조가 되지 않는다.
    • static 변수는 매개변수로 사용할 수 없다.
  • 접근 제어자
    • private: 클래스 내(클래스 내에 정의된 함수)에서만 접근 허용
    • public: 프로그램의 모든 함수에서 접근 허용
    • protected: 클래스 내의 멤버 함수와 이 클래스를 상속받는 파생 클래스의 멤버 함수에게만 접근 허용
  • 생성자
    • 클래스의 객체 생성 시에 private 멤버를 자동 초기화한다.
    • 생성자의 이름은 클래스의 이름과 같아야 한다.
    • 이니셜라이저를 통해 멤버변수를 빠르게 초기화 가능하다.
      PhoneBook::PhoneBook(void) : idx(0),
                                  cnt_contact(0) {
      }    

네임스페이스 (범위지정 연산자 ::)

내부 식별자에 사용될 수 있는 유효 범위를 제공하는 선언적 영역
같은 이름을 가지고 있는 함수나 변수를 클래스나 특정 영역을 구별하기 위한 인터페이스

ex02

과제

주어진 Account.hpp와 test.cpp (main문)을 참고하여 Account.cpp를 작성하는 것

개념

#pragma

  • 사전적 의미로 만능이란 의미를 가진다. VS C++에서 컴파일러에게 그 뒤에 오는 내용에 따라 어떤 일을 하라는 전처리 명령어로 사용된다.

#pragma once: 한번 컴파일 되면 더이상 컴파일 하지 않는다.
#pragma comment(lib, "ws2_23"): obj 파일에 커멘트를 남기라는 명령어
#pragma pack(n): n에 1, 2, 4, 8 등이 올 수 있으며 이는 네트워크 통신을 개발할 때 구조체 멤버들을 align하는 데 사용된다.
#pragma warning: 컴파일시에 어떤 조건(#if, #ifndef)에 의해 개발자에게 어떤 것을 알려주고 싶을 경우 사용한다.

profile
기록하는 사람

0개의 댓글