목록💘 C++/변수범위, 변수형 (10)

구조체 struct 객체를 표현하기 위해 하나 이상의 변수가 필요한 프로그래밍 사례가 많다. 예를 들어 사람을 묘사한다고 생각해보면 위에는 어떻게든 그룹화 되지 않은 4개의 독립 변수가 있다. 한 사람에 대한 정보를 함수에 전달하려면 각 변수를 개별적으로 전달해야한다. 또한, 다른 사람에 대한 정보를 저장하려면 추가된 사람마다 4개의 변수를 추가로 선언해야 한다. 다행히도 C++ 에서는 고유한 사용자 정의 집계 데이터 유형(user-defined aggregate data type)을 생성할 수 있다. 집계 데이터 유형(aggregate data type)은 여러 개별 변수를 함께 그룹화하는 데이터 유형이다. 가장 단순한 집계 데이터 유형 중 하나는 구조체(struct)다. 즉, 구조체(struct)는 ..

typedef typedef 를 사용하려면 프로그래머가 타입의 별칭을 생성하고, 실제 타입 이름 대신 별칭을 사용할 수 있다. 즉 C++에서 이미 정의된 자료형이나 사용자정의 자료형보다 더 짧거나 의미있는 이름을 지어 줄 수 있다. typedef를 선언하려면 typedef 키워드를 사용하고 자료형 다음에 별칭 이름을 사용하면 된다. typedef double distance_t; //distance_t를 double 자료형의 별칭으로 정의한다. //다음 두 문장은 같다. double howFar; distance_t howFar; 관습적으로 typedef 별칭은 "_t" 접미사를 사용하여 선언한다. typdef는 새로운 타입을 정의하지 않는다.기존 타입의 별칭일 뿐이다. typdef는 일반타입을 사용할 ..

Scoped Enumerations(Enum class) C++ 11 열거형(enum)은 C++ 에서 고유한 유형이지만, 형식이 안전하지 않으므로 어떤 경우에는 이해가 되지 안는 작업을 수행할 수 있다. 앞에서 enum의 단점, 주의해야할 것들이 있었는데 이 단점들 중 일부를 보완하기 위해서 만든 영역제한열거형을 enum class 라고 부른다. 참고로 enum struct도 있는데 enum struct 보다는 enum class를 많이 쓴다. color와 fruit를 비교했을 때 둘 다 내부적으로 숫자 0이기 때문에 int로 바꿔서 비교하니까 두 개가 같다고 나온다. 프로그래머 입장에서는 실수할 가능성이 높아진다. 그래서 enum class 라는 것을 사용 할 수 있다. 이렇게 비교를 하면 못하게 막아..

열거형 enumerated types 컴퓨터는 모든 숫자들을 정확하게 구분 할 수 있는데 사람은 간단한 숫자도 알아차리기 어려운 경우가 많다. 그래서 프로그래머들은 비슷한 유형의 다양한 옵션들을 기호적으로 표현하기 위해서 열거형을 사용한다. C++에는 많은 자료형이 내장되어 있다. 하지만 이 자료형들이 원하는 걸 표현하기에 항상 충분하지는 않다. 그래서 C++은 프로그래머들이 자신만의 자료형을 만들 수 있게 해 주는 기능을 포함하고 있다. 이러한 자료형을 사용자 정의 자료형이라고 한다. 열거형은 가능한 모든 값이 기호 상수(열거형)로 정의되는 자료형이다. 열거형은 enum 키워드를 통해 정의된다. 게임을 만든다고 가정하고 캐릭터가 맞았을때 피해치를 얼머나 줘야하는 지 계산하는 함수를 만들어보자. 이때 어..

문자열 , std::string 글자나 문자들이 나열되어 있는 것들을 문자열(string)이라고 한다. C++ 에서 문자열을 이용해 이름, 주소, 단어, 문장과 같은 텍스트를 출력한다. 문자열 리터럴(Ex. "Hello, world!")은 큰따옴표("") 사이에 배치되어 문자열로 식별된다. 문자열은 프로그램에서 흔히 사용되므로 대부분의 현대 프로그래밍 언어에는 문자열 자료형이 내장되어 있다. C++은 표준 라이브러리의 일부로 문자열(string)이 포함되어 있다. const char[13]이 나오니까 글자가 13개인가라고 생각할 수 있다. 하지만 글자는 12개이다. 문자열을 표현을 할 때에는 맨 뒤에 보이지 않는(끝난다는것을 표현하는) 글자가 하나 숨어있다. std::string C++의 문자열을 사용하..
암시적 형변환 Implicit Type Conversion(coersion) 즉 컴파일러가 자동으로 하나의 기본 자료형을 다른 자료형으로 변환한다. 자동 형 변환 automatic type conversion 이라고 불린다. 이전에 변수의 값이 일련의 비트로 저장되는 것과 변수의 자료형은 컴파일러에 비트를 의미있는 값으로 해석하는 방법을 알려준다는 것을 배웠다. 다른 자료형은 "같은"숫자를 다르게 나타낼 수 있다. 예를들어 , int 값 3과 float 값 3.0은 완전히 다른 이진수 패턴으로 저장된다. float f =3; //Initialize floating point variable with integer 3 위의 경우 컴파일러는 값 3을 나타내는 비트만 float f로 할당 할 수 없다. 대신 ..

auto C++ 11에서 타입 추론 (Type Inference in C++ 11) C++에서 auto 키워드는 유용하다. 123이 정수라는 것을 이미 알고 있다면 , 왜 a의 타입(=자료형)을 int라고 명시적으로 선언해야 할까? 변수를 초기화 할 때 사용하는 값을 기준으로 적절한 타입을 추론하도록 하면 편하지 않을까? auto 키워드는 선언된 변수의 초기화 식을 사용하여 해당 형식을 추론하도록 컴파일러에 지시한다. 즉, auto 키워드를 사용하면 초기값의 형식에 맞춰 선언하는 인스턴스(변수)의 형식이 자동으로 결정된다. 이것을 타입 추론(type inference), 형추론 이라고 한다. 당연하지만 초기화를 하지 않으면 auto를 사용할 수 없다. 변수를 함수의 반환 값으로 초기화 할 때도 사용 가능..

using 명령문 표준 라이브러리를 많이 사용하는 경우, 표준 라이브러리에서 사용을 위해서 std::를 입력해야 한다. C++은 using 명령문을 사용한 단순한 방법을 제공한다. The using declaration 단순화하는 한 가지 방법은 using 선언문을 사용하는 것이다. #incldue int main() { using std::cout

전역 변수 Global Variable 함수 외부에서 선언된 변수를 전역 변수(global variable)라고 한다. 전역 변수는 정적 주기(static duration)로, 프로그램이 시작 할 때 생성되고 프로그램이 종료 될 때 파괴된다. 전역 변수는 파일 스코프(or 전역 스코프)를 가진다. 이것은 전역 변수가 정의된 시점 부터 정의된 소스 파일의 끝까지 접근 가능하다는 것을 의미한다. 전역 변수 정의하기 Defining Global Variables 일반적으로 전역 변수는 소스 코드의 맨 위에 있는 #include 밑에 정의하지만, 어디든 상관없다 #include // 함수 외부에서 정의된 변수는 전역 변수(global variable)다. int g_x; // global variable g_x..

블록(block) 블록 (=복합 명령문) 복합 명령문(compound statement)라고도 불리는 블록(block)은 마치 한 명령문 같이 보이는 명령문의 그룹이다. 블록은 { 기호로 시작해서 }기호로 끝나고, 기호 사이에 실행할 명령문을 배치한다. 블록은 단일 명령문이 허용되는 모든 위치에서 사용할 수 있고, 블록 끝에는 세미콜론이 필요하지 않다. 블록은 다른 블록 내부에 중첩될 수 있다. 지금까지는 if문에서 조건이 true일 때 단일 명령문을 실행했다. 그러나 블록은 단일 명령문이 허용되는 모든 위치에서 사용할 수 있으므로 중첩된 명령문 블록을 사용하여 조건이 true인 경우 if 문에서 여러 명령문을 실행할 수 있다. #include int main() { std::cout > value; i..