관리 메뉴

사적공간

홍정모 C++(섹션 1~3) 본문

KNOU_CS/C++

홍정모 C++(섹션 1~3)

2sac 2024. 11. 27. 16:28
#include<iostream>
using namespace std; 


int main() {

    cout << "\a"; // 소리출력
 
    return 0;

}

 

 

함수 명에가서 마우스 우클릭 rename을 하면 함수명을 한번에 바꿈.ctrl+f와 비슷한 기능같음.

 

 

 

디버거 모드, f11

 

 

c++은 함수 안에 함수가 선언 안됨. 

 

키워드

 

변수명은 대문자로 잘 안쓴다. 

 

선언으로 바로가기

 

 

헝가리안 표기법이 거의 의미 없어지는 시대가 오고 있음. 

 

 


범위

 

 

 

 


기본적인 서식 맞추기 

 

 

 

 

들여쓰기 == 인덴팅
저렇게 뒤에 더 출력될 게 있으면 << 남겨두기

 

 

탭으로 보기좋게 정리 

 

 


선언과 정의의 분리 

 

전방선언

 

 

정의

 

 

 

마우스 우클릭 peek definition

함수 엿보기 기능 ( 다른 파일에 흩어져 있을 때 유용함) 


헤더파일 만들기 

 

 코드를 여러 파일로 쪼개는 법 

 

 

 

 

 

 

 

 

 

 

 

 

iostream 있는 곳 

 

 

 

 

 

 

 

헤더파일을 폴더를 만들어 그 안에 옮기고, 

 

원래 옮기면 비주얼 스튜디오에서 인식이 안되어서 추가작업으로 remove를 해주고 #include 에서 새로 생성한 폴더까지 경로로 넣어주어야 하는데 지금 시점에서는 그냥 됨.

 

그 과정 

 

헤더에 다 포함시켜서 해도 되고, 

 

나중에 코딩하고 헤더파일을 정리하는 과정을 여러번 반복하게 됨. 

 


헤더가드 

강의 노트로 북마크 해놓음 

 

몸체가 없으면 링킹에러를 일으킴. 

함수명이 있으면 빌드는 가능 

 

-> 중복될 경우에 한번만 인클루드를 해라 (이게 헤더가드) 

 

ifndef ~ endif 사이가 인클루드 되어 있다면 다시 인클루드 하지 말라. 사진에선 MY_ADD

 

#pragma once 가 있으면 ifndef ~ endif 와 똑같이 동작함. 

 

 

에러가 뜨지만 컴파일은 됨... 

조금 더 공부해야봐야 할 듯 

헤더파일

 

 


네임스페이스(명칭공간)

 

 

이렇게 쓰는 것도 가능. 

 

 

네임스페이스 안에 네임스페이스 추가 및 활용  

 

 

 

<iostream> 안을 보면 std 공간 안에 cin, cout 이 정의되 었다. 

 

 


전처리기

매크로

 

 

 

삼항연산 매크로
라이브러리 가져다 쓰기

  

 

빌드 들어가기 전 들어감.

멀티 플랫폼에서 많이 씀. 

 

 

 

#ifdef ~ #endif 

#ifndef ~ #endif 

LIKE_APPLE 이 정의되어 있으면 APPLE 출력 , 정의가 안되어 있으면 ORANGE 출력

 

 

 

define 이 교체해주는 건 맞는데 전처리기 안에선 교체를 안함. 

 

 

define의 효과는 작성된 파일 안에서만 영향을 끼침. 

그래서 아래는 오렌지가 출력됨. 

 

 


기본 자료형 소개 

 

 

 

 

불리언

 

 딥러닝은 플로트, 파이썬 기본은 더블로 쓰고 있음.... 

 

 

 

사이즈

 

 

 

 

초기화

객체지향 프로그래밍 할 때 중요한 초기화 방법// 내가 만든 데이터 타입을 초기화 할 때 많이 씀. 

 

다른 사람들의 문법을 읽고 이해하기 위해서라도 다양한 문법을 읽고 이해하기. 

 

에러가 뜨고
워닝이 뜸.

 

타입 캐스팅.

 

 

인위적 타입 캐스팅


정수형

 

 

2^32

 

 

 

 

 

#include<climits>

사이즈 제한이 있고, 그 제한을 넘어가면 문제가 생긴다는 것이 중요함. 

 

 

오버 플로우 현상

 

언더플로우
오버플로우

 

 

실수 22를 4로 나눔.

 


고정 너비 정수 

 

 

 

 

 


 

무치형(void, 보이드)

void 포인터 변수 선언

정수형 변수의 주소

실수형 변수의 주소 

 

주소를 표현하는 데이터 양은 동일함. 타입은 달라도

그대서 둘다 void*로 형변환이 가능함. 

 

 


부동소수점 수

Floating Point Number 

 

 

 

 

 

 

표현하려는 숫자의 범위를 보려고 할때 lowest

 

표기법

 

 

 

부동소수점 쓸 때 발생하는 중요한 오류 내용 

 

소수점 표시하는 기능 있는 라이브러리 iomaniip

 

 

이런 오차가 누적되면 에러가 크게 발생함.. ex) 게임에서 이상한 버그가 있는게 이런 것 때문임.

 

 

0.1에 가장 가까운 수 ..

 

 

1과 0.1을 열 번 더한 것의 미세한 차이

 

  

 

얘네 다 숫자가 아니다. isnan() 함수
0이 나오면 nan이 아니다. 숫자다


boolean 자료형과 조건문 if 

 

 

다시 숫자로 표현하고 싶을 때는 noboolalpha
not operater : !
불리언 변수는 문자로 입력하면 안됨. 0이 아니면 true이기 때문에

 

 

실제로 해봤는데 결과가 달랐음.


 

문자형 char

 

 

 

<변환할 대상이 되는 타입>

 

 

 

97
a

 

스테틱 캐스트를 해도 원래 변수에 저장된 값이 바뀌진 않는다. 

 

 

 

 

 

버퍼에 남아서 저렇게 한번 입력으로 세번 들어감. static berffer

 

 

 

 

 

 

 

endl 과 \n 차이 

 

\n 은 줄바꿈 

endl; 는 버퍼에 있는 내용을 일단 다 표시해라. 

 

std:: flush : 버퍼에 있는 걸 다 비우고, 줄바꿈 안해. 

 

 

 

 


리터럴 상수 

 

 

언사인드 U

 

 

읽기 쉽게 하기 위해 '(쿼테이션)을 넣는데, 컴파일러는 무시함.

 

 

 

숫자에 의미를 주석으로 설명하기 보단 cont int 형으로 변수를 선언해서 쓰면 좋음.

 

 


심볼릭 상수 

 

매개변수에 const를 넣는 경우

 

 

이렇게 쓰는 경우가 훨씬 많음

 

 

이렇게 할 수 있어

 

 

#include <iostream>
#include<iomanip>
#include<limits>
using namespace std;



int main()
{
    const int my_const(123); // 컴파일 상수 ( 컴파일 할 때 값이 결정됨)

    int number;
    cin >> number; 

    const int special_number(number); // 런타임 상수(런타임 할 때 값이 결정됨)



return 0;
}

 

 

 

컴파일과 런타임의 차이를 이해해야 함. 

 

#include <iostream>
#include<iomanip>
#include<limits>
using namespace std;



int main()
{
    constexpr int my_const(123); // constexpr는 컴파일 시간에 값이 결정되는 상수라는 걸 컴파일하면서 체크함. 

    int number;
    cin >> number; 

    const int special_number(number); // 런타임 상수(런타임 할 때 값이 결정됨)



return 0;
}

 

#define은 해당 파일 전체에 영향을 미치지만 

const는 블록 내에서만 영향을 미치게 할 수 있음. 

그 외 차이가 있음 

 

 

const가 다양하게 쓰일 때가 있음. 그래서 몰아놓기도 함. 

이렇게 따로 헤더파일을 만들어서 모아놓고 

 

 

아래처럼 쓸 수 있음.