본문 바로가기

C++ 키워드 : final, explicit 본문

C++

C++ 키워드 : final, explicit

니렙에잠이오냐 2019. 4. 3. 21:26

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