-1
Когда класс наследует другой публично, то не должны ли все виртуальные функции перезаписываться? Рассмотрим код -Виртуальные функции и частные члены с открытым наследованием в C++
class A {
private:
vector<int> v;
public
virtual int something() {
cout << "A" << endl;
return v.size();
}
}
class B : public A {
private:
priority_queue<int> v;
public
int something() {
cout << "B" << endl;
return v.size();
}
}
Теперь, когда я вызываю функцию something()
на объекте b
из class B
путем выполнения оператора b.something()
, я получаю выход A
. Почему это?
Опубликовать * полный * рабочий пример, пожалуйста. То, что вы опубликовали, выглядит просто отлично - помимо проблемы, что она явно перепечатана, а не вырезана/вставлена, поскольку она не будет компилироваться ('public' sb.' Public: ') – Roddy
Я адаптировал это из вашего кода и печатает «В». http://ideone.com/ADQKFc - это говорит о том, что вы делаете что-то неочевидное и не включено в ваш пример. Вы копируете B где угодно? – polkadotcadaver
Держу пари, что вы [нарезка] (http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c) объект где-то. – jrok