Класс статического типа по отношению к указателям в C ++ - PullRequest
0 голосов
/ 04 ноября 2018

Я серьезно запутался из-за статических и динамических типов в C ++. В следующем примере, почему указатели учетной записи считаются статическими?

class Account{
    public:
      virtual string getType() { return "Generic Account"; };
  };

  class Current: public Account{
    public:
      virtual string getType() { return "Current Account"; };  
  };

  class Deposit: public Account{
    public:
      virtual string getType() { return "Deposit Account"; };  
  };

  int main()
  {
    // Note that all pointers have the static type Account
    Account *a = new Account(); 
    Account *b = new Current();
    Account *c = new Deposit();

    cout << "Pointer a Displayed: " << a->getType() << endl;
    cout << "Pointer b Displayed: " << b->getType() << endl;
    cout << "Pointer c Displayed: " << c->getType() << endl;
  }

Являются ли все указатели типа базового класса статическими и все указатели производного класса динамическими? Например, будет

Текущий * d = новый депозит ();

быть динамическим, поскольку он является производным типом класса? Заранее спасибо.

1 Ответ

0 голосов
/ 04 ноября 2018

Не существует статических или динамических указателей . Но есть статические и динамические типы .


Обычно переменные и выражения имеют только один тип, который также называется статическим типом .
Полиморфные экземпляры классов дополнительно имеют динамический тип .

Если выражение относится к экземпляру базового класса, расположенному внутри экземпляра производного класса, то динамический тип выражения - это производный класс.


Пример должен прояснить это:

Account *a = new Account(); 
Account *b = new Current();
Account *c = new Deposit();

Здесь и *a, *b и *c имеют одинаковый статический тип - Account. Статический тип не зависит от того, на что указывают эти указатели, а только от того, как они были объявлены.

С другой стороны, динамические типы *a, *b и *c равны Account, Current и Deposit соответственно. Динамический тип зависит от того, на что действительно указывают указатели.

...