【发布时间】:2018-02-12 14:49:03
【问题描述】:
我正在尝试在以下代码中覆盖equal 方法:
class object{
int a;
public:
virtual bool equal(const object& o) const{
return this->a==o.a; // not sure if i can access private field (o.a) from one object function to the object o so it's another question
}
};
class point: public object{
double x;
double y;
public:
bool equal(const point& o) const override{
return (this->x==o.x && this->y==o.y);
}
};
我曾想过重载operator== 并将其用作friend 函数,但如果我能在这种情况下以某种方式实现它会对我有所帮助...
【问题讨论】:
-
如果您在
point::equal函数之后添加特殊标识符override(如bool equal(const point& o) const override { ... }),那么编译器会告诉您您没有覆盖任何内容。 -
在任何实施之前,您想要做的事情在设计层面上都会失败。假设我持有一个
object &,它指的是point,我用另一个object来称呼它——也许是square。发生什么了? -- 在一般情况下,派生函数可以接受比其父函数更宽的参数集,但不能接受更窄的参数集。 -
如果它采用不同的参数类型,则不是重载
-
哦,好的...谢谢,一些程序员老兄
-
你可以简单地尝试一下,然后得到一个类似 error:
bool point::equal(const point&) const标记为override,但不会覆盖的错误。你有吗?
标签: c++ overriding virtual-inheritance