프로그램의 실행 구조 / Bitwise / 순수 가상함수
1) Bitwise 연산

ex) 예제
#include <cstdio>
int main() {
// Bitwise or
// Bitsise and
// Shift << , >> 비트를 왼쪽 오른쪽으로 이동시키는것
int v1 = 1; // 0001
int v2 = 3; // 0011
int bitwise_or = v1 | v2;
printf("bitwise_or: %d\n", bitwise_or);
// 01 10 2진수를 구했기 때문에 11이 돼서 3이 된다
int bitwise_and = v1 & v2;
printf("bitwise_and: %d\n", bitwise_and);
// and 연산은 01 이 나온다 겹치는게 마지막 1 하나있기 때문
int shift_left = v2 << 1; // 0110
printf("shift_left: %d\n", shift_left);
int shift_right = v2 >> v1; // 0001
printf("shift_right: %d\n", shift_right);
return 0;
}
-Bitwise 연산은 비트를 기준으로 논리연산을 진행하는 것을 Bitwise 연산이라고 합니다.비트와이즈 연산은 컴퓨터에서 가장 빠른 속도로 실행되기 때문에 이를 유용하게 활용하게 되면 재미있는 코드를 만들어낼 수 있고 성능도 잡을 수 있습니다.이를 이용한 대표적인 알고리즘이 게임에서 카테고리별 충돌 체크 알고리즘입니다. 카테고리를 나눠서 적당한 위치에 integer변수를 두고 이 integer변수를 bitwise and 연산하는 것만으로 충돌이 될 대상인지 아닌지를 바로 판단할 수 있어 조건문을 줄일 수 있고 성능 향상을 노릴 수 있습니다.
2) 순수 가상함수

예제)
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstring>
enum class Time {
Mornig, Afternoon, Night
};
class Animal {
public:
char name[100];
Animal(const char* name) {
strcpy(this->name, name);
}
// 순수 가상함수 만드는 방법
virtual int getLegs() = 0;
void printInfo() {
printf("이름: %s / 다리: %d\n", name, getLegs());
}
};
class Person : public Animal {
private:
Time time = Time::Mornig;
public:
Person(const char* name) : Animal(name) {}
virtual int getLegs() {
switch (time) {
case Time::Mornig: return 4;
case Time::Afternoon: return 2;
case Time::Night: return 3;
}
return 2;
}
void setTime(Time t) {
this->time = t;
}
};
class Dog : public Animal {
public :
Dog() : Animal("개"){}
virtual int getLegs() {
return 4;
}
};
int main() {
Person* p = new Person("영희");
p->setTime(Time::Afternoon);
p->printInfo();
Dog* d = new Dog();
d->printInfo();
return 0;
}
3) 프로그램의 실행 구조

*더 알아보기
함수라는 것은 이와 같이 call stack을 통해 값이 복사가되고 관리가 되기 때문에함수 호출에는 필수적으로 함수 호출 비용 이라는 것이 발생하게 됩니다.이 함수 호출 비용이라는 것은 '메모리적인 문제' 혹은 '연산 속도적인 문제' 둘 다에 해당합니다.