기본 클래스 방법을 호출하기 위해 간결한 (아직도 표현력이 있음) C ++ 구문

StackOverflow https://stackoverflow.com/questions/2434632

문제

기본 클래스 방법을 구체적으로 호출하고 싶습니다. 이것을하는 가장 간결한 방법은 무엇입니까? 예를 들어:

class Base
{
public:
  bool operator != (Base&);
};

class Child : public Base
{
public:
  bool operator != (Child& child_)
  {
    if(Base::operator!=(child_))  // Is there a more concise syntax than this?
      return true;

    // ... Some other comparisons that Base does not know about ...

    return false;
  }
};
도움이 되었습니까?

해결책

아니, 그것은 간결한 것만 큼 간결합니다. Base::operator!= 메소드의 이름입니다.

그리고 네, 당신이하는 일은 표준입니다.

그러나 예제에서 (코드를 제거하지 않는 한) 필요하지 않습니다. Child::operator!= 조금도. 그것은 같은 일을합니다 Base::operator!= 할 것이다.

다른 팁

1

if ( *((Base*)this) != child_ ) return true;

2

if ( *(static_cast<Base*>(this)) != child_ ) return true;

3

class Base  
{  
public:  
  bool operator != (Base&);  
  Base       & getBase()       { return *this;}
  Base const & getBase() const { return *this;}
}; 

if ( getBase() != child_ ) return true;

당신이하는 일은 가장 간결하고 "표준"방법이지만 어떤 사람들은 이것을 선호합니다.

class SomeBase
{
public:
    bool operator!=(const SomeBaseClass& other);
};

class SomeObject: public SomeBase
{
    typedef SomeBase base;  // Define alias for base class

public:
    bool operator!=(const SomeObject &other)
    {
        // Use alias
        if (base::operator!=(other))
            return true;

        // ...

        return false;
    }
};

이 방법의 이점은 의도를 명확하게하고, 긴 기본 클래스 이름이 될 수있는 것에 대한 표준 약어를 제공하고, 기본 클래스가 변경되면 기본의 모든 사용을 변경할 필요는 없습니다.

보다 C ++에서 "Super"사용 추가 논의를 위해.

(개인적으로, 나는 이것을 신경 쓰지 않으며, 나는 그것을 추천하지 않지만, 그것이 질문에 대한 유효한 대답 중 하나라고 생각합니다.)

if (condition) return true;
return false;

약칭 할 수 있습니다

return condition;

IF/그런 다음 제어 구조를 제거하고 기본 클래스 연산자의 반환 값을 반환하지만 그렇지 않으면 당신이하고있는 일은 괜찮습니다.

그러나 조금 더 간결 할 수 있습니다. return ((Base&)*this) != child_;

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top