C 언어
상수(constants)는 프로그램이 변경할 수 없는 고정값을 말하며, 이를 리터럴(literals)이라고 부릅니다.
상수는 기본 데이터 타입 중 어느 것이든 될 수 있으며, 정수 리터럴, 부동소수점 리터럴, 문자, 문자열, 불리언 값으로 나눌 수 있습니다.
상수는 값이 정의 후 수정될 수 없다는 점을 제외하면 일반 변수처럼 취급됩니다.
정수 리터럴은 10진수, 8진수, 16진수 상수가 될 수 있습니다. 접두사가 밑(radix)을 지정합니다: 16진수는 0x 또는 0X, 8진수는 0, 10진수는 접두사 없음.
정수 리터럴에는 U(unsigned)와 L(long)의 조합인 접미사가 붙을 수 있습니다. 접미사는 대소문자 구분 없이 어떤 순서로든 올 수 있습니다.
정수 리터럴 예시:
212 // 합법적 215u // 합법적 0xFeeL // 합법적 078 // 불법: 8은 8진수 숫자가 아님 032UU // 불법: 접미사 중복 불가
다양한 타입의 정수 리터럴 추가 예시:
85 // 10진수 0213 // 8진수 0x4b // 16진수 30 // int 30u // unsigned int 30l // long 30ul // unsigned long
부동소수점 리터럴은 정수 부분, 소수점, 소수 부분, 지수 부분으로 구성됩니다. 10진수 형태 또는 지수 형태로 표현할 수 있습니다.
10진수 형태 사용 시 소수점, 지수, 또는 둘 다를 포함해야 하며, 지수 형태 사용 시 정수 부분, 소수 부분, 또는 둘 다를 포함해야 합니다. 부호 있는 지수는 e 또는 E로 표시합니다.
부동소수점 리터럴 예시:
3.14159 // 합법적 314159E-5L // 합법적 510E // 불법: 불완전한 지수 210f // 불법: 소수점이나 지수 없음 .e55 // 불법: 정수 부분 또는 소수 부분 누락
표준 C++ 키워드인 두 가지 불리언 리터럴이 있습니다.
true 값을 나타내는 true.
false 값을 나타내는 false.
true의 값이 1과 같고 false의 값이 0과 같다고 생각해서는 안 됩니다.
문자 리터럴은 작은따옴표로 묶습니다. 리터럴이 L(대문자만)로 시작하면 와이드 문자 리터럴(예: L'x')이며 wchar_t 타입 변수에 저장해야 합니다. 그렇지 않으면 좁은 문자 리터럴(예: 'x')이며 단순 char 타입 변수에 저장할 수 있습니다.
문자 리터럴은 일반 문자(예: 'x'), 이스케이프 시퀀스(예: '\t'), 유니버설 문자(예: '\u02C0')가 될 수 있습니다.
C++에서 백슬래시가 앞에 오면 특수한 의미를 가지는 문자들이 있습니다. 줄바꿈(\n)이나 탭(\t)을 나타내는 데 사용됩니다. 주요 이스케이프 시퀀스 코드:
| 이스케이프 시퀀스 | 의미 |
|---|---|
| \\ | \ 문자 |
| \' | ' 문자 |
| \" | " 문자 |
| \? | ? 문자 |
| \a | 경고음/벨 |
| \b | 백스페이스 |
| \f | 폼 피드 |
| \n | 줄바꿈(개행) |
| \r | 캐리지 리턴 |
| \t | 수평 탭 |
| \v | 수직 탭 |
| \ooo | 1~3자리 8진수 |
| \xhh... | 1자리 이상 16진수 |
이스케이프 시퀀스 문자 예제:
Live Demo#include <iostream>
using namespace std;
int main() {
cout << "Hello\tWorld\n\n";
return 0;
}
위 코드를 컴파일하고 실행하면:
Hello World
문자열 리터럴은 큰따옴표로 묶습니다. 문자열은 문자 리터럴과 유사한 문자들을 포함합니다: 일반 문자, 이스케이프 시퀀스, 유니버설 문자.
긴 줄을 문자열 리터럴로 여러 줄로 나누고 공백으로 구분할 수 있습니다.
문자열 리터럴 예시. 세 형태 모두 동일한 문자열입니다.
"hello, dear" "hello, \ dear" "hello, " "d" "ear"
C++에서 상수를 정의하는 두 가지 간단한 방법이 있습니다.
#define 전처리기 사용.
const 키워드 사용.
#define 전처리기로 상수를 정의하는 형태:
#define identifier value
상세 예제:
Live Demo#include <iostream>
using namespace std;
#define LENGTH 10
#define WIDTH 5
#define NEWLINE '\n'
int main() {
int area;
area = LENGTH * WIDTH;
cout << area;
cout << NEWLINE;
return 0;
}
위 코드를 컴파일하고 실행하면:
50
const 접두사를 사용해 특정 타입의 상수를 선언할 수 있습니다.
const type variable = value;
상세 예제:
Live Demo#include <iostream>
using namespace std;
int main() {
const int LENGTH = 10;
const int WIDTH = 5;
const char NEWLINE = '\n';
int area;
area = LENGTH * WIDTH;
cout << area;
cout << NEWLINE;
return 0;
}
위 코드를 컴파일하고 실행하면:
50
상수를 대문자로 정의하는 것이 좋은 프로그래밍 관행입니다.
C 언어
C++ 연산자 오버로딩 이 튜토리얼에서는 예제와 함께 연산자 오버로딩을 학습합니다. C++에서는 객체와 구조체 같은 사용자 정의 타입에 대해 연산자 작동 방식을 변경할 수 있습니다. 이를 연산자 오버로딩(operator overloading)이라 합니다. 예를 들어, Complex 클래스로 표현되는 복소수 객체 c1, c2, result 세 개를 만들었다고 가정합시다. 연산자 오버로딩으로 + 연산자 작동 방식을 재정의하면, 다음과 같이 c1과 c2의 복소수를 더할 수 있습니다: result = c1 + c2; 다음과 같은 방식 대
C++ 상속 이 튜토리얼에서는 예제를 통해 C++의 상속에 대해 학습합니다. 소개 상속은 C++에서 객체 지향 프로그래밍의 핵심 기능 중 하나입니다. 기존 클래스(기반 클래스)로부터 새로운 클래스(파생 클래스)를 생성할 수 있게 해줍니다. 파생 클래스는 기반 클래스의 기능을 상속받으며 자체적인 추가 기능을 가질 수 있습니다. 예를 들어: class Animal { // eat() 함수 // sleep() 함수 }; class Dog : public Animal { // bark() 함수 }; 여기서 Dog 클래