float GetScore(const char* name);
float GetScore(int id);
Class* myClass = new Class("COMP3100");
int score = myClass->GetScore(NULL);
/*
어떤 함수가 호출될까??
float GetScore(int id); 이 호출 됨...
*/
#define NULL 0 // 숫자
typedef decltype(nullptr) nullptr_t; // null 포인터 상수
int number = NULL;// OK
int* ptr = NULL;// OK
int anotherNumber = nullptr;// ERROR
int* anotherPtr = nullptr;// OK
nullptr 은 메모리 상으로는 0이지만 컴파일 중에 포인터가 아니면 에러를 발생 시켜준다.
NULL대신 nullptr을 사용해야 한다. 더 이상 NULL이 있을 곳이 없다. NULL은 과거의 호환성때문에 존재할 뿐이다.
char
short
long
long long
int
'사실 위의 데이터 크기는 표준이 없다. 따라서 int가 12바이트여도 할 말이 없다.'
왜 이런 것들을 외워야 될까??
각 자료형이 내 컴파일러에서 몇바이트인지 알 고 싶다...
C++ 11에서 지원
가독성 향상을 위해 낡은 기존 자료형보다 이것들을 쓰자
int8_t score = Student>GetScore();
// 데이터 범위를 표현하기가 더 좋음.
enum eScoreType
{
Assignment1,// 0
Assignment2,
Assignment3,
Midterm,
Count, // 4, 배열 잡을때 Count를 이용해 배열 잡음.
};
enum eStudyType
{
Fulltime,// 0
Parttime,// 1
};
:
:
int num = Assignment3;// 에러 안 남
eScoreType type = Midterm;
if(type == Fulltime)// 에러 안 남.
{
}
// Type Checking이 없기 때문에 문제이다.
enum class eScoreType
{
Assignment1,// 0
Assignment2,
Assignment3,
Midterm,
Count, // 4, 배열 잡을때 Count를 이용해 배열 잡음.
};
enum class eStudyType
{
Fulltime,// 0
Parttime,// 1
};
:
:
int num = eScoreType::Assignment3;// 에러 발생 시킴
eScoreType type = eScoreType::Midterm;
if(type == eStudyType::Fulltime)// 에러 발생 시킴
{
}
enum class
enum class eScoreType : uint8_t
{
Assignment1, // 0
Assignment2,
Assignment3,
Midterm,
Final, 0x100, // 경고, 12bit
};
허나 이렇게 할 수는 없음 :(
for(int i = eScoreType::Assignment1; i < eScoreType::Count; ++i)
{
// 점수들 처리
}
for(int i = static_cast<int>(eScoreType::Assignment1);
i < static_cast<int>(eScoreType::Count);
++i)
{
// 점수들 처리
}