[C++] Bitwise와 순수 가상함수

2023. 2. 13. 15:51·C++/C++

◆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
'C++/C++' 카테고리의 다른 글
  • [C++] const, static, extern
  • [C++] 문자열, 네임스페이스, 레퍼런스 타입
  • [C++] LNK
  • [C++] 여러개의 헤더와 소스
메카인
메카인
  • 메카인
    메카인의 지식창고
    메카인
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 코딩 공부
        • TIL(Today I Learn)
        • TIL
        • 백준(C++)
        • Python
        • 알고리즘
        • 프로젝트 회고
      • C++
        • C++
        • C++ STL
        • C,C++ mCoding yotube
      • 게임개발
        • 언데드서바이벌_골드메탈_클론코딩
        • 3D_골드메탈_클론코딩
        • 유니티_문제해결
        • 게임 수학
      • Unreal 공부
        • UE5 GameDev
        • Unreal Engine 4 C++ The Ult..
      • 교재 문제 풀이
        • 운영체제
      • 정보처리기사
        • 정처기 요약
        • 정처기 오답노트
      • 학교수업
        • 데이터베이스
        • 프로그래밍 언어론
        • 리눅스 시스템
        • 네트워크
      • 일상
        • 주식
        • 독서
        • 일기
      • (비공개 전용)
        • memory
        • Build
        • OOP
        • Smart Pointer
        • lamda
        • 게임 수학
        • 모던 C++
        • 모던 C++ STL
        • 모던 C++ Concurrency, Paralle..
        • 책
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 블로그 관리
  • 링크

  • 공지사항

    • 공지사항 - 인생과 블로그의 목표
  • 인기 글

  • 태그

    ~
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
메카인
[C++] Bitwise와 순수 가상함수
상단으로

티스토리툴바