Перегрузка констант методами, разделенными на базовые и производные классы [duplicate]

Быстрое примечание: если вы хотите сделать выбор на основе частичной строки, содержащейся в индексе, попробуйте следующее:

df['stridx']=df.index
df[df['stridx'].str.contains("Hello|Britain")]
13
задан esh 8 July 2010 в 10:42
поделиться

2 ответа

TTBOMK у этого нет реальной технической причины, просто Stroustrup при создании языка считал это лучшим дефолтом. (В этом он аналогичен правилу, что rvalues ​​не подразумевает привязку к ссылкам не const.)

Вы можете легко обойти это, чтобы явное использование версий базового класса в области производного класса:

class base {
public:
  void f(int);
  void g(int);
};

class derived : public base {
public:
  using base::f;
  void f(float);
  void g(float); // hides base::g
};

или путем прямого вызова:

derived d;
d.base::g(42); // explicitly call base class version
13
ответ дан sbi 20 August 2018 в 22:59
поделиться
  • 1
    Этот ответ на другой связанный с ним вопрос дает обоснование - stackoverflow.com/questions/1628768/… – jon-hanson 8 July 2010 в 10:46
  • 2
    Я очень рад быть членом этой группы. Члены здесь потрясающие. Я так удивлен, увидев ответы в кратчайшие сроки. – esh 8 July 2010 в 10:50
  • 3
    @jon: На самом деле, этот вопрос дублирует. Я проголосовал за удаление этого. – sbi 8 July 2010 в 10:57
  • 4
    @ Джон. Спасибо за ссылку. На самом деле этот вопрос получил полную информацию, которую я хотел узнать. Здесь никто не ответил на мою «почему» часть вопроса !!! – esh 8 July 2010 в 11:10

Доступны функции, вам просто нужно их явно вызвать:

struct A {
   void f(){}
};

struct B : public A {
   void f() {}
};

int main() {
   B b;
   b.f();     // call derived function
   b.A::f();  // call base function
}
7
ответ дан user 20 August 2018 в 22:59
поделиться