Скажем, у меня есть классы Foo
и Bar
настроены так:
class Foo
{
public:
int x;
virtual void printStuff()
{
std::cout << x << std::endl;
}
};
class Bar : public Foo
{
public:
int y;
void printStuff()
{
// I would like to call Foo.printStuff() here...
std::cout << y << std::endl;
}
};
Как отмечено в коде, я хотел бы иметь возможность вызывать функцию базового класса, которую я переопределяю. В Java есть super.funcname()
синтаксис. Возможно ли это в C ++?
Ответы:
Синтаксис C ++ выглядит так:
источник
call super requirement
, проверьте это здесь: en.wikipedia.org/wiki/Call_super )Да,
Он такой же, как
super
в Java, за исключением того, что он позволяет вызывать реализации из разных баз, когда у вас множественное наследование.источник
Иногда вам нужно вызвать реализацию базового класса, когда вы не в производной функции ... Это все еще работает:
источник
x
иметь как тип, такBase*
иBase::Foo
синтаксисНа всякий случай, если вы делаете это для многих функций в вашем классе:
Это может сэкономить немного времени, если вы хотите переименовать Foo.
источник
Если вы хотите вызвать функцию базового класса из ее производного класса, вы можете просто вызвать внутри переопределенной функции с упоминанием имени базового класса (например, Foo :: printStuff () ).
код идет здесь
Опять же, вы можете определить во время выполнения, какую функцию вызывать, используя объект этого класса (производный или базовый). Но для этого необходимо, чтобы ваша функция в базовом классе была помечена как виртуальная.
код ниже
источник
Проверь это...
вывод
лучший способ - использовать функцию base :: скажем @sth
источник
protected
наследования. Чтобы привести указатель базового класса, вы должны использовать публичное наследование.Да, вы можете назвать это. Синтаксис C ++ для вызова функции родительского класса в дочернем классе
Узнайте больше о переопределении функций .
источник