336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

override

꽤 갈망해왔던 키워드이다.

base class에 있는 virtual을 상속받아서 쓰는경우에 base class에 있는 함수를 바꾸고 drived class 의 함수를 바꾸지 않았을 때 오작동하는 잡기 쉽지 않은 버그가 컴파일할때 에러가 나주면 얼마나 감사할까... 할 때 쓰시면 된다.

 

struct AAA

{
    virtual void f();
};


struct BBB : public AAA

{
    virtual void f() override {} // OK
    virtual void f2() override {} // error C3668: 'BBB::f2' : method with override specifier 'override' did not override any base class methods
};

 

abstract

virtual foo() = 0;

대신에

virtual foo() abstract;

로 쓸 수 있다.

함수에서는 별 필요 없지만 클래스 에서는 강력하게 사용할 수 있다.

class X abstract {};

int main()

{
    X * MyX = new X; // C3622 cannot instantiate abstract class
}

이런식으로 class 통째로 abstract기능을 걸 수 있다.

인터페이스 class 를 만들 때 유용할 듯...이라고 생각할 수 있지만 인터페이스 클래스는 __interface 키워드가 있으므로 걍 추상 클래스에만 사용하쟈...

사실 인터페이스용으로 사용해도 내용으로는 구분이 안되는 내용이지만 알아서 구분해 쓰자

 

__is_abstract(type) 으로 컴파일 타임 체크 가능

 

__interface

__interface I1

{
    virtual void f();
};

위의 abstract 키워드로 선언한 class 와의 차이

멤버변수를 가질 수 없다.

static류를 사용할 수 없다.

생성자, 파괴자, 오퍼레이터 오버로딩 불가(엑-.ㅜ 인터페이스 클래스에서 이거 꽤 쓰는데..;;)

인터페이스는 상속 가능, base class는 상속 안됨

public pure virtual함수만 가질 수 있음

장점은 virtual table을 차지하지 않음

 

sealed

더이상 오버라이딩 못하게 할 때 사용한다.

함수와 클래스 둘 다 사용가능

__is_sealed (type) 으로 컴파일 타임 체크 가능

 

.끝.

native 기준이고 CLR 에서만 사용가능한건 적지 않았음

위에 몇 개 나왔지만 __is_abstract 같은 컴파일 타임에 사용가능한 TypeTraits 가 꽤 있다.

특정 클래스가 base 클래스를 상속 받았는지를 체크하는것도 있고(CLR에서만 되지만)

__has_copy(type) 나 __has_assign(type) 같은

native에서 쓸만한 것도 꽤 있다.

근데 사실 TypeTraits 는 필요한건 native 지원 안하면 loki를 써버리면 그만


출처 : http://cafe.naver.com/jzsdn/5941

'Programming > C / C++' 카테고리의 다른 글

bitset  (0) 2015.02.07
const 를 이용한 포인터 상수화  (0) 2015.02.07
switch 분할 호출  (0) 2015.02.07
가변 인수  (0) 2015.02.07
STL without warnings  (0) 2015.02.07
Posted by 역시인생한방
,