일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 클래스 다이어그램
- 소켓 통신
- 캡슐화
- 무료 동영상 강의
- 동영상 강의
- 유튜브 동영상 강의
- c언어
- C++
- 알고리즘
- 표준 라이브러리 함수
- 추천
- 소스 코드
- 언제나휴일
- 네트워크 프로그래밍
- 원격 제어 프로그램
- 충남 천안
- Windows Forms
- 안드로이드 앱 개발
- 동영상
- c#
- 프로젝트
- 실습
- 졸업 작품
- 졸업 작품 소재
- 산책하기 좋은 곳
- 실습으로 다지는 c#
- 파이썬
- 강의
- 언제나 휴일
- 표준 입출력
Archives
- Today
- Total
프로그래밍 언어 및 기술 [언제나휴일]
[C++] 48. 증감 연산자 중복 정의 본문
이번에는 증감 연산자 중복 정의를 하는 방법을 살펴보기로 할게요. 아시는 것처럼 증감 연산자는 단항 연산자로 전위에 올 때와 후위에 올 때 연산 결과가 다릅니다. 전위에 올 때는 값을 증감한 자기 자신이 연산 결과이고 후위에 올 때는 변경하기 전의 자신의 값입니다.
따라서 전위 증감 연산자의 반환 형식은 자기 자신을 전달하기 위해 클래스 형식 &를 사용합니다. 그리고 후위 증감 연산자의 반환 형식은 증감하기 전 자신의 값을 복사한 개체를 상수 값으로 반환하기 위해 const 클래스 형식을 사용합니다.
C++에서 증감 연산자 중복 정의할 때 전위인지 후위인지 구분하기 위해 후위 증감 연산자 중복 정의할 때는 스텁 매개 변수를 추가로 받게 정의합니다. 다음은 Score 클래스에서 ++ 연산자를 전위와 후위로 중복 정의할 때의 원형입니다.
Score & operator++(); //전위 ++ 연산자 중복 정의
const Score operator++(int); //후위 ++ 연산자 중복 정의
0~100점 사이의 값을 갖는 성적 클래스를 정의하고 증감 연산자 중복 정의하는 예제를 보여드릴게요.
//Score.h
#pragma once
#include <iostream>
using namespace std;
class Score
{
int value;
public:
static const int max_score;
static const int min_score;
static const int not_score;
Score(int value);
int GetValue()const; //값 접근자
void Increment();//값 1 증가
void Decrement();//값 1 감소
Score &operator++(); //전위 ++ 연산자 중복 정의
const Score operator++(int); //후위 ++ 연산자 중복 정의
Score &operator--(); //전위 -- 연산자 중복 정의
const Score operator--(int); //후위 -- 연산자 중복 정의
private:
void SetValue(int value);//값 설정자
};
//Score.cpp
#include "Score.h"
const int Score::max_score=100;
const int Score::min_score=0;
const int Score::not_score=-1;
Score::Score(int value)
{
SetValue(value);
}
int Score::GetValue()const
{
return value;
}
void Score::Increment()
{
if(value<max_score)
{
value++;
}
}
void Score::Decrement()
{
if(value>min_score)
{
value--;
}
}
Score &Score::operator++() //전위 ++ 연산자 중복 정의
{
Increment();
return (*this);
}
const Score Score::operator++(int) //후위 ++ 연산자 중복 정의
{
Score score(*this);
Increment();
return score;
}
Score &Score::operator--() //전위 -- 연산자 중복 정의
{
Decrement();
return (*this);
}
const Score Score::operator--(int) //후위 -- 연산자 중복 정의
{
Score score(*this);
Decrement();
return score;
}
void Score::SetValue(int value)
{
if((value<min_score)||(value>max_score))
{
value = not_score;
}
this->value = value;
}
//증감 연산자 중복 정의
#include "Score.h"
int main()
{
Score score(20);
cout<<"score "<<score.GetValue()<<" 후위 ++"<<endl;
Score re = score++;
cout<<"score: "<<score.GetValue()<<" 연산 결과:"<<re.GetValue()<<endl;
cout<<"score "<<score.GetValue()<<" 전위 ++"<<endl;
re = ++score;
cout<<"score: "<<score.GetValue()<<" 연산 결과:"<<re.GetValue()<<endl;
return 0;
}
▷ 실행 결과
score 20 후위 ++
score: 21 연산 결과:20
score 21 전위 ++
score: 22 연산 결과:22
'C & C++ > 디딤돌 C++' 카테고리의 다른 글
[C++] 52. 함수 개체 (0) | 2024.04.09 |
---|---|
[C++] 51. 묵시적 형 변환 연산자 중복 정의 (0) | 2024.04.09 |
[C++] 50. 인덱스 연산자 중복 정의 (0) | 2024.04.09 |
[ C++] 49. 대입 연산자 중복 정의 (0) | 2024.04.09 |
[C++] 47. 클래스에 연산자 중복 정의 (0) | 2024.04.09 |
[C++] 46. 전역 연산자 중복 정의 (0) | 2024.04.09 |
[ C++] 45. 연산자 중복 정의 개요 (0) | 2024.04.09 |
[ C++] 44. 상속과 다형성 최종 실습 – 코드 (0) | 2024.04.08 |