C++ 키워드 : final, explicit 본문
final
class Test final{}; 과 같이 final키워드를 붙이게 되면 해당 클래스를 더 이상 상속받을 수 없게 된다.
또한
class Test : public Parent
{
void TestFunc() final override;
};
다음과 같이 가상함수에 final키워드를 붙이게 되면 Test를 상속받은 자식 클래스들은 더 이상 TestFunc을 오버라이딩 할 수 없다.
explicit
class Test
{
public:
Test(){}
Test(const int& i){}
}
int main()
{
Test t;
t = 3;
}
위의 코드 내용을 보면 클래스 변수에 상수를 대입하고 있는데 이 코드는 에러를 일으키지 않지만 상당한 문제를 동반한다.
위의 상황에서 컴파일러는 해당 클래스에 상수를 대입하기 위해 연산자가 있는지 검사 후 연산자가 없다면 생성자를 통한 함축적 형변환을 통해 대입을 시도한다. exmaple : t = t(3)
그런 결과 위와 같이 클래스에 해당 int형이 대입연산 가능해지는 문제가 발생한다.
이런 함축적변환을 막기 위해서 explicit라는 키워드가 존재하는데 사용 방법은 다음과 같다.
class Test
{
Test(){}
explicit Test(const int& i) {}
}
explicit는 해당 생성자의 함축적변환을 막으며 해당 생성자는 반드시 명시적 호출만이 가능해진다.
'C++' 카테고리의 다른 글
MYSQL 연습 - 2(INSERT, SELECT, UPDATE, DELETE) (0) | 2019.06.08 |
---|---|
MYSQL 연습 - 1(MYSQL 기본 연동) (0) | 2019.06.07 |
캐시 메모리에 대해 (0) | 2019.06.05 |
lambda(람다) (2) | 2019.04.04 |
해쉬 테이블(HashTable) (0) | 2019.04.04 |
Comments