我想专门调用基类方法;什么是最简洁的方法呢?例如:
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;
}
};
答案 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_;