◆Bitwise 연산
- & : 비트끼리 and 연산
- | : 비트끼리 or 연산
- << : 비트를 왼쪽으로 shift
- >> : 비트를 오른쪽으로 shift
int bitwise_or = v1 | v2;
int bitwise_and = v1 & v2;
int shift_left = v2 << 1;
int shift_right = v2 >> 1;
◆게임에서 사용되는 Bitwise
▷카테고리를 나눠서 충돌하는 여부를 파악하는데 유용하게 쓰입니다.
ex) 메이플에서의 충돌여부
충돌판정 여부 | 캐릭터(4) | 몬스터(2) | 지형(1) |
캐릭터 | 0 | 1 | 1 |
몬스터 | 1 | 0 | 1 |
지형 | 1 | 1 | 1 |
#include <cstdio>
void Crash();
int main(){
int character_category = 0 + 2 + 1;
int enemy_category = 4 + 0 + 1;
int terrain_category = 4 + 2 + 1;
Crash(character_category);
}
void Crash(int category) {
int category1 = 1;
int category2 = 1 << 1;
int category3 = 1 << 2;
if ((category1 & category) != 0) {
printf("카테고리1(지형)에 충돌에 포함됩니다.\n");
}
if ((category2 & category) != 0) {
printf("카테고리2(몬스터)에 충돌에 포함됩니다.\n");
}
if ((category3 & category) != 0) {
printf("카테고리3(캐릭터)에 충돌에 포함됩니다.\n");
}
return 0;
}
◆순수 가상함수(Pure virtual function)
▷몸체가 없는 가상함수이다.
▷선언만 존재하고 그 동작을 자식 클래스에서 구현해야 한다.
▷순수 가상함수를 가지고 있는 클래스는 객체가 생성되지 않는다.
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstring>
enum class Time {
Morning, Afternoon, Night
};
//가상 함수를 포함하면 객체를 만들수 없다.
class Animal {
public:
char name[50];
Animal(const char* name) {
strcpy(this->name, name);
}
virtual int eatTimes() = 0;
void printInfo() {
printf("이름 : %s / 먹은 끼니수: %d \n", name,eatTimes());
}
};
class Person :public Animal {
private:
Time time = Time::Morning;
public:
Person(const char* name) : Animal(name){}
virtual int eatTimes() {
switch (time)
{
case Time::Morning:
return 1;
break;
case Time::Afternoon:
return 2;
break;
case Time::Night:
return 3;
break;
default:
break;
}
return 2;
}
void eatTimes(Time t) {
this->time = t;
}
};
class Dog : public Animal {
public:
Dog() : Animal("개"){}
virtual int eatTimes() {
return 0;
}
};
int main() {
Person* p = new Person("퉁퉁이");
p->eatTimes(Time::Morning);
p->printInfo();
p->eatTimes(Time::Afternoon);
p->printInfo();
p->eatTimes(Time::Night);
p->printInfo();
}
'C++ > C++' 카테고리의 다른 글
[C++] const, static, extern (0) | 2023.02.15 |
---|---|
[C++] 문자열, 네임스페이스, 레퍼런스 타입 (0) | 2023.02.13 |
[C++] LNK (0) | 2023.02.13 |
[C++] 여러개의 헤더와 소스 (0) | 2023.02.13 |
[C++] 열거형 (0) | 2023.02.08 |