November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Thursday, March 31st, 2005 04:49 pm


Берём простейший код:
class B {
  public:
    void method(char c);
    void method(int i);
};

class M {
 int i;
};

class D: public B {
  public:
    void method(M);
};

int main() {
  D d;
  M m;

  d.method('c'); // не работает
  d.method(0); // тоже не работает
  d.method(m); // работает
}

И обнаруживаем, что для объекта производного класса методы базового нифига не вызываются (error: no matching function for call to `D::method(char)'), потому что они перекрыты одноимённым методом в производном.
И где, спрашивается, это ваше хвалёное наследование?
Да, если из D убрать одноимённый метод, то всё работает.
Кто знает, чем обусловлена такая странность?
Thursday, March 31st, 2005 12:57 pm (UTC)
Хе. Забавный overloading.
А он должен так работать, вообще?

(удаляется, подумывая, не научиться ли писать на C++)
Thursday, March 31st, 2005 12:59 pm (UTC)
Я думал, что должен. И таки работает, если в производном классе нет ни одной одноимённой функции.
А вот если есть хоть одна, даже не перекрывающая по аргументам базовый вариант, то фиг.