본문 바로가기

C++ 기초 1

(48)
[C++] 오버플로우 (overflow) 오버플로우 int형 변수를 4바이트로 처리하는 경우, -2,147,483,648 ~ 2,147,483,647 (-2^32 ~ 2^31-1)까지의 정수를 표현할 수 있다. 따라서 이 범위를 벗어나는 정수가 데이터로 입력되면 이를 처리할 수 없는 상태가 발생하게 되는데 이러한 상태를 오버플로우(overflow)라고 한다. 자세한 내용은 아래 예제에서 확인할 수 있다. 예제 #include using namespace std; int main() { int x, y;//4바이트 int형 x = 2147483648; y = 2147483649; cout
[C++] 단항 연산자 단항 연산자 단항 연산자에는 음수 부호 연산자, 증가 연산자, 감소 연산자가 있다. 음수 부호 연산자는 부호를 반전시키며 뺄셈 연산자와는 구분된다. 증감 연산자는 변수에만 사용이 가능하며 변수 값을 1씩 증가 또는 감소시킨다. 증감 연산자가 변수 앞에 있는 경우를 선행 (prefix) 증감 연산자라고 하며, 변수 뒤에 있는 경우를 후행 (postfix) 증감 연산자라고 한다. 선행 증감 연산자는 먼저 변수 값을 1 증감시킨 후에 증감된 변수 값을 이용해서 다른 연산이 수행되도록 한다. 후행 증감 연산자는 주어진 변수 값을 이용해서 다른 연산이 수행된 이 후에 변수 값을 1씩 증감시킨다. 자세한 내용은 아래 예제에서 참고할 수 있다. 예제 #include using namespace std; int mai..
[C++] 조건 연산자 조건 연산자 조건 연산자(conditional operator)는 기호 ?:로 표시한다. 조건 연산자의 사용 형식 조건식 ? 연산식 1 : 연산식 2 조건 연산자는 먼저 조건식을 평가하여 참이면 연산식 1을 수행하고, 거짓이면 연산식 2를 수행한다. 자세한 내용은 아래 예제에서 참고할 수 있다. 예제 #include using namespace std; int main() { int a, b, max, min; cout > b; max = (a > b) ? a : b; min = (a < b) ? a : b; cout
[C++] 캐스트(cast) 연산자 캐스트(cast) 연산자 데이터형을 강제적으로 변환시키고자 할 때는 캐스트(cast) 연산자를 사용한다. 캐스트 연산자의 사용 형식은 변환 대상 앞에 괄호를 이용하여 데이터형을 기입하면 된다. 변환 대상은 상수, 변수, 수식 등이 있다. 예제 #include using namespace std; int main() { float a, b, c, d; int x, y; a = 1.56, b = 2.45; c = 1.56, d = 2.45; x = (int)a + (int)b; //x는 정수형//x=1+2=3 y = c + d;//y는 실수형 //y=1.56+2.45=4 cout
[C++] sizeof 연산자 sizeof 연산자 sizeof 연산자는 변수, 수식, 상수 및 데이터형이 메모리 중에서 차지하는 크기를 바이트(byte)수로 구해주는 연산자이다. 예제 #include using namespace std; int main() { int a, b; float c; double d; a = sizeof(int); b = sizeof(char); cout
[C++] goto문 설명 및 예제 goto문 goto문은 프로그램을 실행하는 도중에 해당 레이블명이 있는 문장으로 프로그램의 제어를 강제적으로 이동시킨다. 레이블 표시가 있는 문장은 goto문보다 앞에 나올 수도 있고 뒤에 나올 수도 있다. 레이블명과 문장은 콜론(:)으로 구분한다. 일반적으로 한 개의 루프를 빠져나오는 경우에는 break문이 유용하지만, goto문은 다중 루프를 벗어나고자 할 때 좋다. goto 문은 동일 함수 내에서만 효력이 발생하며, 다른 함수로는 이동시킬 수 없다. 예제 #include using namespace std; int main() { int i = 1; first: cout
[C++] 6-5 프렌드 연산자 함수 프렌드 연산자 함수 연산자를 특정 object에 대해 오버로드하는 경우, 연산자 함수를 프렌드 함수로 정의할 수 있다. 일반적으로 연산자 오버로드는 프렌드 함수보다 멤버 함수로 많이 이용된다. 프렌드 연산자 함수를 호출하는 경우, 이는 멤버 함수가 아니므로 this 포인터가 암묵적으로 전달되지 않는다. 따라서 프렌드 연산자 함수로 이항 연산자를 오버로드하는 경우에는 연산에 사용되는 2개의 object가 프렌드 연산자 함수의 매개변수에 전달되어야 한다. 단항 연산자를 오버로드하는 경우, 연산에 이용된 1개의 object가 프렌드 연산자 함수의 매개변수로 전달되어야 한다. 예제 #include using namespace std; class myscore { private: int kor; int eng; ..
[C++] 6-4 []연산자의 오버로드 []연산자의 오버로드 배열 첨자 연산자 []를 오버로드할 때 C++에서는 이를 이항 연산자로 간주한다. []는 멤버 함수로만 오버로드가 가능하고 프렌드 함수로는 오버로드할 수 없다. 그리고 연산자 함수인 operator[]()의 인수는 int형으로 사용해야만 한다. 예제 #include using namespace std; class myclass { private: int a[4]; public: myclass() { int i; for (i = 0; i < 4; i++) a[i] = i; } int& operator[](int i) { return a[i]; } }; int main() { myclass ob; int i; for (i = 0; i < 4; i++) cout
[C++] 6-3 관계 연산자의 오버로드 관계 연산자의 오버로드 관계 연산자(>, =, =(score ob); }; int score::operator>=(score ob)//연산자 함수의 정의 { return kor >= ob.kor && eng >= ob.eng;//0 또는 1을 반환 }; int main() { score ob1(90, 70), ob2(60, 60), ob3(50, 20); if (ob1 >= ob2) cout =(score ob2)의 형태로 실행되고, 0 또는 1의 값으로 반환된다. 참고 1. 장인성 외 5인, (초보자도 쉽게 따라 할 수 있는) C++프로그래밍, 광문각, 2017.02.13
[C++] 6-2 단항 연산자의 오버로드 단항 연산자의 오버로드 데이터 항(오퍼랜드)이 한 개인 단항 연산자(unray operator; ++, - 등)를 멤버 연산자 함수로 오버로드할 때는 멤버 연산자 함수 operator#()는 매개변수를 사용하지 않는다. 연산자 함수의 호출은 연산에 사용된 오퍼랜드가 하게 되며, 그 오퍼랜드만이 포인터 this에 의해 연산자 함수에 암묵적으로 전달된다. 예제1 #include using namespace std; class score { private: int kor, eng; public: score() { kor = 0; eng = 0; } score(int a, int b) { kor = a; eng = b; } void output(int& a, int& b) {//int &a=x, int &b=y..