Ботва для ИУ-5


№22, 25. Раннее и позднее связывание классов

К экзамену по информатике запостил Fenix [2007.06.13]  

Итак, в промежутках между анекдотами про “не с глаголами”, Козлов очень невнятно рассказал про связывание классов.

Насколько я понял, он подразумевает, что в данном случае связывание будет происходить между интерфейсным классом и конкретной реализацией. Т. е. если мы создаем абстрактный класс interf, мы можем использовать указатель типа interf* для работы с любыми потомками класса interf. Соответственно, не всегда во время компиляции можно сказать, объект какого класса будет находиться в памяти по указателю. Этот случай называется поздним связыванием или связыванием “времени выполнения”. Если же все известно заранее - связывание раннее. Пример:

class interf        

  {        

    public:        

     virtual int getlength()=0;        

  }        

  class square:interf
  {
    private:
     int side;
    public:
     int getlength()
      {
        return side;
      }
  }        

class rectangle:interf
  {
    private:
     int sideA, sideB;
    public:
     int getlength()
      {
        return (sideA>sideB?sideA:sideB);
      }
  }   

//статическое (раннее) связывание
interf* staticPTR = new square();  

interf* dynamicPTR;
cout>>"Input q if it's square";
char isquad;
cin>>isquad;  

//динамическое (позднее) связывание
if (isquad)
{
ptr = new square();
}
else
{
ptr = new rectangle;
}

//еще инфа

Каменты: 0  | [+1]

Оставить комментарий



Вы должны авторизоваться чтобы оставлять комментарии.

Вы можете использовать ваш OpenID:

Вы можете использовать HTML-тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>