用于调用基类方法的简洁(但仍具有表现力)的C ++语法

时间:2010-03-12 17:38:57

标签: c++ inheritance syntax base-class

我想专门调用基类方法;什么是最简洁的方法呢?例如:

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;
  }
};

5 个答案:

答案 0 :(得分:8)

不,这是简洁的。 Base::operator!=是方法的名称。

是的,你所做的是标准的。

但是,在您的示例中(除非您删除了一些代码),您根本不需要Child::operator!=。它与Base::operator!=会做同样的事情。

答案 1 :(得分:5)

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;

答案 2 :(得分:3)

你所做的是最简洁和“标准”的方式,但有些人更喜欢这样:

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;
    }
};

这种方法的好处在于它澄清了意图,它为您提供了可能是长基类名称的标准缩写,如果您的基类发生了变化,您不必更改基础的每次使用

有关其他讨论,请参阅Using "super" in C++

(就个人而言,我不关心这一点,我不推荐它,但我认为这是对这个问题的一个有效答案。)

答案 3 :(得分:1)

if (condition) return true;
return false;

可以缩写为

return condition;

答案 4 :(得分:-1)

我摆脱了if / then控制结构,只返回基类运算符的返回值,但是你正在做的事情很好。

但它可以更简洁一点:return ((Base&)*this) != child_;