№22, 25. Раннее и позднее связывание классов
Итак, в промежутках между анекдотами про “не с глаголами”, Козлов очень невнятно рассказал про связывание классов.
Насколько я понял, он подразумевает, что в данном случае связывание будет происходить между интерфейсным классом и конкретной реализацией. Т. е. если мы создаем абстрактный класс 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;
}
//еще инфа
Оставить комментарий
Вы должны авторизоваться чтобы оставлять комментарии.
Вы можете использовать HTML-тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>