VEDA 복습/C, C++

VEDA 7일차 - C++ 프로그래밍

잡학다식을꿈꾼다 2025. 3. 25. 16:13
반응형

 

실습 환경 : Visual Studio

C와 겹치는 내용이 많아서, 추가하는 방식으로 강의가 진행된다.

 

변수와 연산자

C++의 표준 입출력 : <iostream>

  • 입력 : std::cin (extractor)
  • 출력 : std::cout (inserter)

namespace : 변수의 소속을 명확히 해주는 스코프(Scope) 연산자

using namespce std -> namespace를 std로 사용하겠다. | 이 방식은 비추천한다. 특히 namespace가 여러개인 경우에는 더더욱 주의해야 한다.

std : C++에서 많이 사용하는 함수, 유틸리티 등이 정의되어 있다.

 

  • cout 출력 : 스트림 객체를 사용, 자료형에 제한을 받지 않고 << 연산자를 이용하여 데이터를 받는 것이 가능하다.
  • cin 입력 : 스트림 객체를 사용, 자료형에 제한을 받지 않고 >> 연산자를 이용하여 데이터를 넣는 것이 가능하다.

C++ 스타일의 변수 선언 : 타입이 아닌 클래스(Class)로 보는 시각이 필요

/*C 스타일*/
type name = value;

/*C++ 스타일*/
type name (value);
type name {value};

 

void : 자료형이 미지정된 상태, sizeof(void) == 1(그러나 의미적으로는 void의 sizeof는 0이어야 한다.)

wide type : 유니코드라는 표준이 정해지기 전에 사용되었던 문자형, 2 Byte -> 입출력 방식도 조금은 달라짐, wcout etc

유니코드로 인코딩하기 위해서는 문자열 앞에 L을 붙여준다.

 

입출력을 생각했을 떄, float 정도면 충분히 훌륭하다.

 

변수의 유효 범위와 형식 변환

변수의 유효 범위 : 변수가 선언된 위치에 따라 사용할 수 있는 범위가 결정된다. 같은 범위에서 같은 변수명을 가지는 변수들이 정의되는 경우 오류가 발생한다. 단 범위가 다르면 오류가 발생하지 않는다.

 

대표적인 범위 : 구문 범위, 지역 범위, 전역 범위, 클래스 범위, 네임스페이스 범위

::var : 네임스페이스 연산자 앞에 아무 이름도 없으면 전역 변수를 의미한다.

 

L-value와 R-value

  • L-value : 대입 연산자의 왼쪽에 나타나는 값, 메모리 위치 또는 수정 가능한 표현식
  • R-value : 대입 연산자의 오른쪽에 나타나는 값, 임시 값, 메모리상에 위치가 없는 값 - R-value에 이름표만 달아주면 굳이 value copy를 하지 않아도 된다.(***move semantics***)

형 변환

C에서 했었던 형 변환 참고 - 가능하기는 하지만 C++ 답지는 않음, 필요시 reinterpret_cast 사용 권장

 

형식 변환 : 명시적 형 변환

  • static_cast : 논리적으로 변경할 수 있는 형 변환
  • const_cast : 포인터 및 레버런스 형식에서만 사용 가능, const, volatile 등 제가할 때 사용
  • reinterpret_cast : 일반적인 형 변환과 같음, 템플릿의 실체, const를 사용하는 변환 대상은 사용할 수 없음
  • dynamic_cast : 클래스의 포인터 및 레퍼런스 변수 간 형변환시 사용 가능, 안전한 다운캐스팅을 위해 사용
/*상속*/

/*부모 클래스*/
X *pX;
/*자식 클래스*/
XX *pXX;

pX = pXX; //implicit type cast가 이루어진다. 부모는 자식 클래스를 받을 수 있다.
pXX = pX; //implicit type cast가 이루어지지 않는다. 자식 클래스는 부모 클래스를 받을 수 없다.
			// 강제적으로 casting을 해주어야 한다. - 
            //static cast(컴파일 시점에서 캐스팅이 이루어짐 - 사고 확률 높음), 
            //dynamic cast(실행 시점에서 캐스팅이 이루어짐 - 구제의 기회가 있음)

 

키워드 : C와 마찬가지로 식별자로 지정해둔 단어들이 있다. 해당 단어들은 변수명으로 사용하지 못한다. C++ 20 기준으로 97개의 키워드가 등록되어 있다.

리터럴 : 코드에 직접 표현된 변하지 않는 값 자체

 

string을 사용하면 문자열을 쉽게 다룰 수 있다.

형 변환 : type() -> 새로운 데이터를 만든다는 것에 가까움, (type)의 우선 순위는 다름

반응형