Я могу вызвать виртуальную функцию базового класса, если я переопределяю ее?

Полагаю, вы используете драйвер сеанса по умолчанию, а именно файлы. Из-за этого ваши сеансы установлены на одном сервере, а другой сервер не знает об этом сеансе. Набор токенов csrf в форме создается и проверяется с использованием текущего сеанса для посетителя, если этот запрос будет отправлен на другой сервер, вы получите ошибку 419, поскольку этот сервер не знает о сеансе.

Чтобы решить эту проблему, вы должны использовать драйвер сеанса, который может использоваться несколькими серверами, такими как database, memcached или redis.

312
задан Sled 8 July 2013 в 06:39
поделиться

3 ответа

Синтаксис C++ похож на это:

class Bar : public Foo {
  // ...

  void printStuff() {
    Foo::printStuff(); // calls base class' function
  }
};
415
ответ дан sth 23 November 2019 в 01:10
поделиться

Да,

class Bar : public Foo
{
    ...

    void printStuff()
    {
        Foo::printStuff();
    }
};

Это совпадает с super в Java, кроме него позволяет называть реализации от различных оснований, когда у Вас есть множественное наследование.

class Foo {
public:
    virtual void foo() {
        ...
    }
};

class Baz {
public:
    virtual void foo() {
        ...
    }
};

class Bar : public Foo, public Baz {
public:
    virtual void foo() {
        // Choose one, or even call both if you need to.
        Foo::foo();
        Baz::foo();
    }
};
114
ответ дан Alex B 23 November 2019 в 01:10
поделиться

На всякий случай Вы делаете это для большого количества функций в Вашем классе:

class Foo {
public:
  virtual void f1() {
    // ...
  }
  virtual void f2() {
    // ...
  }
  //...
};

class Bar : public Foo {
private:
  typedef Foo super;
public:
  void f1() {
    super::f1();
  }
};

Это могло бы сохранить немного записи, если Вы хотите переименовать Foo.

27
ответ дан MartinStettner 23 November 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: