기본 클래스 주위에 매우 얇은 래퍼 인 파생 클래스가 있습니다. 기본적으로, 나는 당신이 그것을 해석하는 방법에 따라 비교 될 수있는 두 가지 방법을 가진 클래스를 가진다. 그래서 나는 기본 클래스에서 파생 된 새로운 클래스를 생성하고 (단지 기본 클래스에 위임 한) 새로운 생성자와 새로운 클래스를 생성한다. operator==
. 내가 뭘하고 싶습니다 파생 클래스에서 operator Base&()
오버로드됩니다 그래서 내가베이스로 해석해야 할 경우. 예를 들어얇은 래퍼 파생 클래스 내에서 기본 연산자로 연산자를 캐스팅하십시오.
:
class Base
{
Base(stuff);
Base(const Base& that);
bool operator==(Base& rhs); //typical equality test
};
class Derived : public Base
{
Derived(stuff) : Base(stuff) {};
Derived(const Base& that) : Base(that) {};
Derived(const Derived& that) : Base(that) {};
bool operator==(Derived& rhs); //special case equality test
operator Base&()
{
return (Base&)*this; //Is this OK? It seems wrong to me.
}
};
내가 할 노력하고있어 간단한 예를 원하는 경우에, 나는 String 클래스를했다 척하고 String==String
문자 비교하여 일반적인 문자입니다. 하지만 CaseInsensitiveString==CaseInsensitiveString
에서 대소 문자를 구분하지 않는 새로운 클래스 CaseInsensitiveString
을 만들었지 만 다른 모든 경우에는 단지 String처럼 동작합니다. 새로운 데이터 멤버조차 가지고 있지 않으며 단지 오버로드 된 operator==
입니다. (제발, std :: string을 사용하라고 말하지 마라. 이것은 단지 예일 뿐이다!)
나는이 권리에 관해 가고 있냐? 뭔가 생기있는 것 같지만 손가락을 넣을 수는 없습니다.
실제 코드에서 가상 소멸자가 있기를 바랍니다. –