<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-640196201733819270</id><updated>2012-01-20T00:30:47.030+04:00</updated><category term='this'/><category term='Quizful'/><category term='массивы'/><category term='константный метод'/><category term='inline'/><category term='оператор'/><category term='встроенная функция'/><category term='new'/><category term='reinterpret_cast'/><category term='агрегация'/><category term='конструктор копирования'/><category term='delphi'/><category term='константный объект'/><category term='Q_OBJECT'/><category term='mingw'/><category term='перечислимые типы'/><category term='размер'/><category term='композиция'/><category term='sizeof'/><category term='указатели'/><category term='QtCreator'/><category term='сапер'/><category term='перегрузка'/><category term='строковые литералы'/><category term='c++'/><category term='const'/><category term='Страуструп'/><category term='QObject'/><category term='QT'/><category term='threads'/><category term='char'/><category term='typeid'/><category term='ошибка'/><category term='static'/><category term='385'/><category term='инициализация'/><category term='конструктор'/><category term='структура'/><category term='планы'/><category term='метод'/><category term='дружественная функция'/><category term='тест'/><category term='pascal'/><category term='типы'/><category term='функции'/><category term='полиморфизм'/><category term='InterlockedExchange'/><category term='InterlockedExchangeAdd'/><category term='Эккель'/><category term='преобразование типа'/><category term='доступ'/><category term='code::blocks'/><category term='класс'/><category term='ссылки'/><title type='text'>ИТ блог</title><subtitle type='html'>Стремлюсь к цели (см. 1-й топик)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>84</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-5636933154686461566</id><published>2011-08-31T10:27:00.000+04:00</published><updated>2011-08-31T10:27:45.990+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='InterlockedExchangeAdd'/><category scheme='http://www.blogger.com/atom/ns#' term='threads'/><category scheme='http://www.blogger.com/atom/ns#' term='InterlockedExchange'/><title type='text'>Пример работы InterlockedExchange</title><content type='html'>&lt;pre&gt;&lt;code&gt;long g_sum;&lt;br /&gt;&lt;br /&gt;unsigned __stdcall ThreadFunc(void* argList){&lt;br /&gt;  for(int i = 0; i&lt;100000000; i++){&lt;br /&gt;    g_sum++;&lt;br /&gt;  }&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int _tmain(int argc, _TCHAR* argv[])&lt;br /&gt;{&lt;br /&gt;  /* Запускаем 2 потока с одной и той же функцией */&lt;br /&gt;  HANDLE hThreads[2];&lt;br /&gt;  hThreads[0] = (HANDLE)_beginthreadex(NULL, 0, &amp;ThreadFunc, NULL, 0, NULL);&lt;br /&gt;  hThreads[1] = (HANDLE)_beginthreadex(NULL, 0, &amp;ThreadFunc, NULL, 0, NULL);&lt;br /&gt;&lt;br /&gt;  /* Ждем... */&lt;br /&gt;  WaitForMultipleObjects(2, hThreads, TRUE, INFINITE);&lt;br /&gt;&lt;br /&gt;  _tprintf(TEXT("sum: %d\n"), g_sum);&lt;br /&gt;&lt;br /&gt;  CloseHandle(hThreads[0]);&lt;br /&gt;  CloseHandle(hThreads[1]);&lt;br /&gt;  return 0;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Скорее всего, результат будет всегда разный, между 100 и 200 миллионами (можно увеличить число операций). Если бы каждый поток блокировал g_sum от другого потока на время изменения, то мы бы получили ровно 200 миллионов. &lt;br /&gt;&lt;br /&gt;Самое простое, что можно сделать для этого - заменить g_sum++ на InterlockedExchangeAdd(&amp;g_sum, 1). Теперь результат всегда корректен. Блокировка происходит на уровне процессора.&lt;br /&gt;&lt;br /&gt;Почему обычный инкремент работает некорректно?&lt;br /&gt;&lt;br /&gt;g_sum++ эквивалентно:&lt;pre&gt;&lt;code&gt;  mov eax, g_sum;&lt;br /&gt;  add eax, 1;&lt;br /&gt;  mov g_sum, eax;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;То есть, реально это несколько операций. И поток может быть прерван другим потоком после выполнения любой из них. Получается какая-то каша. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-5636933154686461566?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/5636933154686461566/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/08/interlockedexchange.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/5636933154686461566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/5636933154686461566'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/08/interlockedexchange.html' title='Пример работы InterlockedExchange'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-3364541904162420883</id><published>2011-04-08T09:32:00.000+04:00</published><updated>2011-04-08T09:32:03.069+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='static'/><category scheme='http://www.blogger.com/atom/ns#' term='const'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>55. Как объявить в классе и проинициализировать статический константный массив?</title><content type='html'>Как и другие &lt;a href="http://ffil.blogspot.com/2011/02/42.html"&gt;статические константы&lt;/a&gt; &lt;br /&gt;&lt;pre&gt;&lt;code&gt;class A{&lt;br /&gt;public:&lt;br /&gt;  static const int arr[];&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;const int A::arr[] = {0,1,2,3,4};&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-3364541904162420883?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/3364541904162420883/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/04/55.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/3364541904162420883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/3364541904162420883'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/04/55.html' title='55. Как объявить в классе и проинициализировать статический константный массив?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-2695306217647546355</id><published>2011-04-08T08:27:00.000+04:00</published><updated>2011-04-08T08:27:16.648+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='static'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>54. Для чего нужны статические поля в классе? Как они определяются?</title><content type='html'>&lt;blockquote&gt;Обычно, каждому объекту соответствуют собственные значения всех его полей. Также к полям класса относят статические поля (static data members, static class fields, class variables) — поля, общие для всех объектов класса.&lt;br /&gt;&lt;br /&gt;Статические поля семантически не отличаются от обычных глобальных переменных, но они доступны только по квалифицированному имени (то есть с указанием имени класса), и поэтому, в отличие от глобальных переменных, не загромождают пространство глобальных имён. &lt;/blockquote&gt;&lt;a href="http://ru.wikipedia.org/wiki/Поле_класса#.D0.A1.D1.82.D0.B0.D1.82.D0.B8.D1.87.D0.B5.D1.81.D0.BA.D0.B8.D0.B5_.D0.BF.D0.BE.D0.BB.D1.8F"&gt;wiki&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;class A{&lt;br /&gt;public:&lt;br /&gt;  static int i;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Обязательно нужно проинициализировать */&lt;br /&gt;int A::i = 0;&lt;br /&gt;&lt;br /&gt;int main(){&lt;br /&gt;  A::i = 1;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-2695306217647546355?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/2695306217647546355/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/04/54.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2695306217647546355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2695306217647546355'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/04/54.html' title='54. Для чего нужны статические поля в классе? Как они определяются?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-1918600904762824056</id><published>2011-04-02T22:11:00.000+04:00</published><updated>2011-04-02T22:11:33.442+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='оператор'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>53. Сколько операндов имеет операция индексирования []? Какой вид результата должна возвращать эта операция?</title><content type='html'>a. Ровно один операнд (параметр). &lt;br /&gt;б. С точки зрения компилятора ничего она не должна и может возвращать что угодно. Или вообще не возвращать. Однако, я бы обиделся на std::vector, если бы не смог присваивать значения таким образом:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;std::vector&lt;int&gt; a(10);&lt;br /&gt;a[3] = 42;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Поэтому, крайне желательно возвращать некоторое lvalue по ссылке, например:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;double&amp; operator[](int i){return _lvalue_;}&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-1918600904762824056?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/1918600904762824056/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/04/53.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1918600904762824056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1918600904762824056'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/04/53.html' title='53. Сколько операндов имеет операция индексирования []? Какой вид результата должна возвращать эта операция?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-2953852896703909017</id><published>2011-03-29T13:59:00.000+04:00</published><updated>2011-03-29T13:59:03.569+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='инициализация'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>52. Разрешается ли объявлять массив в качестве поля класса. Как присвоить элементам массива начальные значения?</title><content type='html'>a. Можно, как и обычный локальный (статический или динамический) массив.&lt;br /&gt;б. Только почленно меняя каждый элемент. Однако можно обнулить массив в списке инициализации: array().&lt;br /&gt;&lt;br /&gt;Хорошо описано &lt;a href="http://www.rsdn.ru/forum/cpp/3292951.1.aspx"&gt;тут&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-2953852896703909017?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/2953852896703909017/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/03/52.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2953852896703909017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2953852896703909017'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/03/52.html' title='52. Разрешается ли объявлять массив в качестве поля класса. Как присвоить элементам массива начальные значения?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-7650410146410464143</id><published>2011-03-24T13:20:00.000+03:00</published><updated>2011-03-24T13:20:14.678+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='const'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='размер'/><title type='text'>51. Влияет ли наличие целочисленных констант-полей на размер класса?</title><content type='html'>Конечно, ведь каждый объект будет хранить свою константу. Но если константа static, то она будет храниться в одном экземпляре для всех объектов класса, и не повлияет на размер объекта.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-7650410146410464143?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/7650410146410464143/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/03/51.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7650410146410464143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7650410146410464143'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/03/51.html' title='51. Влияет ли наличие целочисленных констант-полей на размер класса?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-8928659393776713963</id><published>2011-03-23T14:03:00.000+03:00</published><updated>2011-03-23T14:03:04.208+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='преобразование типа'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>50. Для чего служит ключевое слово explicit?</title><content type='html'>Чтобы запретить неявное преобразование типа, выполняемое конструктором. А вообще такой ворос уже был: &lt;a href="http://ffil.blogspot.com/2011/03/48.html"&gt;48. Как запретить неявное преобразование типа, выполняемое конструктором инициализации?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-8928659393776713963?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/8928659393776713963/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/03/50-explicit.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/8928659393776713963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/8928659393776713963'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/03/50-explicit.html' title='50. Для чего служит ключевое слово explicit?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-7574255322005827004</id><published>2011-03-22T19:11:00.000+03:00</published><updated>2011-03-22T19:11:15.292+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='преобразование типа'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>49. Какие проблемы могут возникнуть при определении функций преобразования?</title><content type='html'>Опять повторюсь, все-таки операции преобразования, а не функции.&lt;br /&gt;Можно столкнуться с неоднозначностью (пример спер):&lt;br /&gt;&lt;pre&gt;&lt;code&gt;struct Tiny{&lt;br /&gt;  Tiny(int){}&lt;br /&gt;  operator int();&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int operator+(Tiny, Tiny);&lt;br /&gt;&lt;br /&gt;int main() {&lt;br /&gt;  Tiny tiny(1);&lt;br /&gt;  cout &lt;&lt; tiny + 2;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Компилятор негодует, он не знает то ли преобразовывать первое слагаемое в int (чтобы вызвать обычный operator+(int, int)), то ли второе в Tiny (operator+(Tiny, Tiny)).&lt;br /&gt;&lt;br /&gt;Конечно еще существует вероятность случайного неявного преобразования.&lt;br /&gt;&lt;br /&gt;Такой оператор следует определить только когда преобразование достаточно очевидно. Но, например, не следует добавлять operator double для вычисления длины вектора, сами же и запутаетесь.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-7574255322005827004?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/7574255322005827004/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/03/49.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7574255322005827004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7574255322005827004'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/03/49.html' title='49. Какие проблемы могут возникнуть при определении функций преобразования?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-4262734999259760062</id><published>2011-03-18T15:55:00.000+03:00</published><updated>2011-03-18T15:55:04.208+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='преобразование типа'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>48. Как запретить неявное преобразование типа, выполняемое конструктором инициализации?</title><content type='html'>О конструкторе инициализации я писал в &lt;a href="http://ffil.blogspot.com/2011/03/46.html"&gt;ответе на 46-й вопрос&lt;/a&gt;.&lt;br /&gt;Для запрета нужно добавить ключевое слово &lt;b&gt;explicit&lt;/b&gt;.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;class A{&lt;br /&gt;public:&lt;br /&gt;  explicit A(B);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;void f(A);&lt;/code&gt;&lt;/pre&gt;Тогда вызовы, типа &lt;code&gt;f(b)&lt;/code&gt; (b экземпляр B) будут запрещены. Однако всегда можно воспользоваться явным преобразованием &lt;code&gt;f(A(b))&lt;/code&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-4262734999259760062?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/4262734999259760062/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/03/48.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4262734999259760062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4262734999259760062'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/03/48.html' title='48. Как запретить неявное преобразование типа, выполняемое конструктором инициализации?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-7457540266960097363</id><published>2011-03-18T15:41:00.000+03:00</published><updated>2011-03-18T15:41:46.863+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='преобразование типа'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>47. Для чего нужны функции преобразования? Как объявить такую функцию в классе?</title><content type='html'>Я уверен, что имеется в виду "оператор преобразования".  &lt;br /&gt;Допустим, мы хотим реализовать некоторую цепочку преобразований для объектов классов A, B, C:&lt;br /&gt;&lt;b&gt;A&lt;/b&gt; &amp;rarr; &lt;b&gt;B&lt;/b&gt; &amp;rarr; &lt;b&gt;C&lt;/b&gt;&lt;br /&gt;Во-первых, можно написать функции преобразования (ну это понятно).&lt;br /&gt;Во-вторых, использовать конструктор (см. &lt;a href="http://ffil.blogspot.com/2011/03/46.html"&gt;вопрос 46&lt;/a&gt;). Для этого нужно добавить конструкторы B::B(A) и C::C(B) и преобразовывать на здоровье. Хоть явно, хоть неявно, как в примере:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;struct A{&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;struct B{&lt;br /&gt;  B(const A&amp;){};&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;struct C{&lt;br /&gt;  C(const B&amp;){};&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int main() {&lt;br /&gt;  A a;&lt;br /&gt;  B b = a;&lt;br /&gt;  C c = b;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Я не добавлял никаких операций в класс A, так как B сам преобразовывает &lt;b&gt;A&lt;/b&gt; &amp;rarr; &lt;b&gt;B&lt;/b&gt;. Преобразованием &lt;b&gt;B&lt;/b&gt; &amp;rarr; &lt;b&gt;C&lt;/b&gt;, занимается C. Но часто оказывается так, что нежелательно или невозможно добавить операцию в C, зато B знает как преобразовать себя в C. Тогда нужно использовать оператор преобразования.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;struct A{&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;struct C{&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;struct B{&lt;br /&gt;  B(const A&amp;){};&lt;br /&gt;  operator C(){};&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int main() {&lt;br /&gt;  A a;&lt;br /&gt;  B b = a;&lt;br /&gt;  C c = b;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Итак, мини-шпаргалка:&lt;br /&gt;&lt;pre&gt;T &amp;rarr; &lt;b&gt;B&lt;/b&gt;        используем конструктор B::B(T)&lt;br /&gt;    &lt;b&gt;B&lt;/b&gt; &amp;rarr; T    используем B::operator T()&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-7457540266960097363?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/7457540266960097363/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/03/47.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7457540266960097363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7457540266960097363'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/03/47.html' title='47. Для чего нужны функции преобразования? Как объявить такую функцию в классе?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-4279548844657419978</id><published>2011-03-11T17:03:00.000+03:00</published><updated>2011-03-11T17:03:20.105+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='преобразование типа'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='конструктор'/><title type='text'>46. Какой вид конструктора фактически является конструктором преобразования типов?</title><content type='html'>Конструктор с одним параметром. Для чего это нужно? Допустим у класса A есть конструктор принимающий единственный параметр - объект класса B. И есть некоторая функция принимающая объект класса A. &lt;br /&gt;&lt;pre&gt;&lt;code&gt;class A{&lt;br /&gt;public:&lt;br /&gt;  A(B);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;void f(A);&lt;/code&gt;&lt;/pre&gt;Если у нас есть экземпляр класса B, то мы можем воспользоваться конструктором A(B), создать объект A, и передать в функцию:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;B b;&lt;br /&gt;A a(b);&lt;br /&gt;f(a);&lt;/code&gt;&lt;/pre&gt;Или, если &lt;b&gt;a&lt;/b&gt; не нужен для других целей (будет создан временный объект класса A):&lt;br /&gt;&lt;pre&gt;&lt;code&gt;B b;&lt;br /&gt;f(A(b));&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Но можно еще проще:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;B b;&lt;br /&gt;f(b);&lt;/code&gt;&lt;/pre&gt;Это эквивалентно примеру выше. Компилятор рассуждает так: "Я не могу передать b в f(A), это разные типы, но может быть есть способ преобразовать b к A? Да, можно воспользоваться конструктором A, передав b. Тогда будет создан объект класса A, его и передам в функцию". &lt;br /&gt;&lt;br /&gt;Это приведение бывает полезным. Например (Страуструп 11.3.5), для операций с комплексными числами. Вместо такой стопки функций:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;complex operator+(complex, complex);&lt;br /&gt;complex operator+(complex, double);&lt;br /&gt;complex operator+(double, complex);&lt;/code&gt;&lt;/pre&gt;можно оставить всего одну (первую), если в Complex создать конструктор Complex(double)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-4279548844657419978?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/4279548844657419978/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/03/46.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4279548844657419978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4279548844657419978'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/03/46.html' title='46. Какой вид конструктора фактически является конструктором преобразования типов?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-3131357908891246464</id><published>2011-03-02T12:48:00.000+03:00</published><updated>2011-03-02T12:48:20.926+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='инициализация'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>45. Какие конструкции С++ разрешается использовать в списке инициализации качестве инициализирующих выражений?</title><content type='html'>Что такое список инициализации? Инициализация членов класса путем явного вызова конструктора.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;/* Класс реализующий комплексное число */&lt;br /&gt;class Complex{&lt;br /&gt;...&lt;br /&gt;  Complex(float re, float im);&lt;br /&gt;...&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class Test{&lt;br /&gt;  Complex a;&lt;br /&gt;public:&lt;br /&gt;  Test():a(3,-2){}&lt;br /&gt;};&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Встретил ответ, что используются lvalue, инициированные rvalue. Его нельзя счесть за правильный, разве что сделать кучу оговорок.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;int a(1);&lt;br /&gt;++a = 5;&lt;/code&gt;&lt;/pre&gt;&lt;b&gt;++a&lt;/b&gt; это lvalue, так как префиксная операция инкремента возвращает ссылку на объект. Но это не инициализация, и мы не сможем добавить &lt;b&gt;++a&lt;/b&gt; в список инициализации. Но если вы видите, что lvalue инициируется rvalue (&lt;b&gt;int a(1)&lt;/b&gt;), то такое можно добавить в список. И можно ли сказать, что a(3,-2) это lvalue инициированное rvalue?&lt;br /&gt;&lt;br /&gt;Поэтому, я считаю, правильный ответ: в качестве инициализирующих выражений используются явные вызовы конструкторов.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-3131357908891246464?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/3131357908891246464/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/03/45.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/3131357908891246464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/3131357908891246464'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/03/45.html' title='45. Какие конструкции С++ разрешается использовать в списке инициализации качестве инициализирующих выражений?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-7310688279458664443</id><published>2011-02-20T18:44:00.000+03:00</published><updated>2011-02-20T18:44:37.967+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>44. В каком порядке инициализируются поля в классе? Совпадает ли этот порядок с порядком перечисления инициализаторов в списке инициализации конструктора?</title><content type='html'>&lt;pre&gt;&lt;code&gt;struct A1{&lt;br /&gt;  A1(){cout&lt;&lt;1;}&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;struct A2{&lt;br /&gt;  A2(){cout&lt;&lt;2;}&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class B{&lt;br /&gt;  A1 x;&lt;br /&gt;  A2 y;&lt;br /&gt;public:&lt;br /&gt;  B():y(),x(){}&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int main() {&lt;br /&gt;  B b;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Сначала объявлен член x, затем y. А в списке инициализации обратный порядок. Посмотрим что важнее. Запускаем. Получим "12". Все верно, ведь &lt;b&gt;инициализация происходит в порядке объявления их в классе&lt;/b&gt;, а не в списке инициализации (так написано в спецификации).&lt;br /&gt;&lt;br /&gt;А еще MinGW предупреждает:&lt;br /&gt;&lt;code&gt;&lt;i&gt;In constructor 'B::B()':&lt;br /&gt;|18|warning: 'B::y' will be initialized after&lt;br /&gt;|17|warning: 'A1 B::x'&lt;br /&gt;|20|warning: when initialized here&lt;/i&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;y&lt;/b&gt; будет проинициализирован позже, чем &lt;b&gt;x&lt;/b&gt;, несмотря на порядок в списке инициализации.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-7310688279458664443?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/7310688279458664443/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/02/44.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7310688279458664443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7310688279458664443'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/02/44.html' title='44. В каком порядке инициализируются поля в классе? Совпадает ли этот порядок с порядком перечисления инициализаторов в списке инициализации конструктора?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-4676373804860171313</id><published>2011-02-18T15:42:00.000+03:00</published><updated>2011-02-18T15:42:24.238+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='const'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>43. Каким образом разрешается инициализировать константные поля в классе?</title><content type='html'>Я уже насписал в ответе на &lt;a href="http://ffil.blogspot.com/2011/02/42.html"&gt;"42. Как объявить константу в классе? Можно ли объявить дробную константу?"&lt;/a&gt;. Вкратце:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;class A{&lt;br /&gt;  const T i;&lt;br /&gt;  static const T i1 = 1; /* Если T - неинтегральный тип, может не сработать */ &lt;br /&gt;  static const T i2;  /* Для неинтегральных типов здесь только объявить, а проинициализировать позже */&lt;br /&gt;  A():i(const_value){}&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;const T A::i2 = const_value;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;К интегральным типам относятся char, short, int и long.&lt;br /&gt;&lt;br /&gt;Есть еще один способ создания констант в классе, это &lt;b&gt;enum hack&lt;/b&gt;. Изменим пример из ответа на 42-й вопрос.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;class Year {&lt;br /&gt;  /*...*/&lt;br /&gt;  enum {MIN_YEAR = 1900, MAX_YEAR = 2100};&lt;br /&gt;  /*...*/&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-4676373804860171313?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/4676373804860171313/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/02/43.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4676373804860171313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4676373804860171313'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/02/43.html' title='43. Каким образом разрешается инициализировать константные поля в классе?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-2476825494805220089</id><published>2011-02-17T13:15:00.000+03:00</published><updated>2011-02-17T13:15:50.039+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='const'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>42. Как объявить константу в классе? Можно ли объявить дробную константу?</title><content type='html'>Сначала нужно подумать, что может означать "константа в классе". Попробую использовать относительно реальные примеры, а не мой любимый "class A" :)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Первый случай&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Допустим, мы пишем класс Polygon (многоугольник). Мы хотим, чтобы количество вершин задавалось при создании объекта.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;class Polygon{&lt;br /&gt;  int vertexes;&lt;br /&gt;public:&lt;br /&gt;  Polygon(int v):vertexes(v){}&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;Таким образом, при создании экземпляра будет необходимо задать количество вершин, так как конструктора по умолчанию уже нет. Все хорошо, но в какой-нибудь функции-члене можно ненароком изменить vertexes, а мы этого не хотим. Тогда и добавляем модификатор const.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;const int vertexes;&lt;/code&gt;&lt;/pre&gt;Значение такой переменной можно задать только в списке инициализации конструктора, как и сделано в примере. А вот так даже и не пытайтесь:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;Polygon(int v){vertexes = v;} /*ошибка*/&lt;/code&gt;&lt;/pre&gt;&lt;i&gt;см. также Страуструп 10.4.6.1. "Необходимая инициализация членов"&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Второй случай&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;У нас есть класс Year, и мы хотим, чтобы задаваемый год не выходил за границы диапазона&lt;br /&gt;&lt;pre&gt;&lt;code&gt;const int MIN_YEAR = 1900;&lt;br /&gt;const int MAX_YEAR = 2100;&lt;br /&gt;const int DEFAULT_YEAR = 2011;&lt;br /&gt;&lt;br /&gt;class Year{&lt;br /&gt;  int year;&lt;br /&gt;public:&lt;br /&gt;  Year(int y);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;Year::Year(int y){&lt;br /&gt;  if(y &lt; MIN_YEAR || y &gt; MAX_YEAR){&lt;br /&gt;    y = DEFAULT_YEAR;&lt;br /&gt;  }else{&lt;br /&gt;    year = y;&lt;br /&gt;  }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;Хорошо было бы, если класс не молчал, а как-то предупреждал о выходе за пределы, например генерировал исключение, но это пока не важно. Я хочу поместить эти константы в класс. Способ из предыдущего примера явно не подходит. Тут явно напрашивается связь со статическими членами. Так и есть, можно использовать статические константные члены.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;class Year{&lt;br /&gt;  int year;&lt;br /&gt;  static const int MIN_YEAR = 1900;&lt;br /&gt;  static const int MAX_YEAR = 2100;&lt;br /&gt;  static const int DEFAULT_YEAR;&lt;br /&gt;public:&lt;br /&gt;  Year(int y);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;const int Year::DEFAULT_YEAR = 2011;&lt;br /&gt;&lt;br /&gt;Year::Year(int y){&lt;br /&gt;  if(y &lt; MIN_YEAR || y &gt; MAX_YEAR){&lt;br /&gt;    year = DEFAULT_YEAR;&lt;br /&gt;  }else{&lt;br /&gt;    year = y;&lt;br /&gt;  }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;Обратили внимание, что DEFAULT_YEAR проинициализирован за пределами класса? Да, можно и так. А с дробными, согласно спецификации, только так.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Можно ли объявить дробную константу?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Вопрос относится ко второму случаю, с первым (класс Polygon) все нормально.&lt;br /&gt;Дробную объявить можно, но проинициализировать только аналогично способу инициализации DEFAULT_YEAR. Однако в спецификации нет явного запрета на:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;class A{&lt;br /&gt;  static const double PI  = 3.1415;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;MinGW на это не ругается, VS не знаю. Почему так сложно с дробными? Я и сам не понял, можно почитать &lt;a href="http://forum.shelek.ru/index.php/topic,7225.0.html"&gt;ветку&lt;/a&gt; форума, там вроде все выяснили.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-2476825494805220089?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/2476825494805220089/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/02/42.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2476825494805220089'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2476825494805220089'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/02/42.html' title='42. Как объявить константу в классе? Можно ли объявить дробную константу?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-2951951034269502230</id><published>2011-02-15T10:34:00.000+03:00</published><updated>2011-02-15T10:34:28.636+03:00</updated><title type='text'>Сервис Connecting Bloggers</title><content type='html'>&lt;blockquote&gt;&lt;i&gt;Мы решили сделать сервис, которые делает тоже самое, автоматически, на основе информации из ваших блогов — мы берем ваши посты, выбираем картинки к ним (если картинки нет, то пытаемся найти в интернете подходящую) и генерируем информер, который вставляется в блог.&lt;br /&gt;&lt;a href="http://habrahabr.ru/blogs/blogosphere/113613/"&gt;http://habrahabr.ru/blogs/blogosphere/113613/&lt;/a&gt;&lt;/i&gt;&lt;/blockquote&gt;Ради любопытства прикрутил виджет, его можно видеть справа. Автоматически подбирающиеся картинки, конечно не в тему, но иногда бывают забавными, пусть пока побудут.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-2951951034269502230?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/2951951034269502230/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/02/connecting-bloggers.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2951951034269502230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2951951034269502230'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/02/connecting-bloggers.html' title='Сервис Connecting Bloggers'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-503760518357390341</id><published>2011-02-14T17:10:00.000+03:00</published><updated>2011-02-14T17:10:29.343+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Страуструп'/><title type='text'>Страуструп "Язык программирования C++". Специальное издание 2011.</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.ozon.ru/multimedia/books_covers/1002079358.jpg" imageanchor="1" style="clear:left; float:left;margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="282" width="200" src="http://www.ozon.ru/multimedia/books_covers/1002079358.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Забывал написать. Наконец-то переиздали. Заказал в декабре, получил 31-го, прямо под новый год.&lt;br /&gt;На &lt;a href="http://www.ozon.ru/context/detail/id/5600302/"&gt;Озоне&lt;/a&gt; аж 924 рубля.&lt;br /&gt;На &lt;a href="http://www.books.ru/shop/books/816590"&gt;books.ru&lt;/a&gt; - 622.&lt;br /&gt;А я брал &lt;a href="http://my-shop.ru/shop/books/80372.html"&gt;здесь&lt;/a&gt; за 684. Удобно, что посылку можно забрать в пункте выдачи заказов и там же оплатить по ее прибытии.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-503760518357390341?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/503760518357390341/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/02/c-2011.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/503760518357390341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/503760518357390341'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/02/c-2011.html' title='Страуструп &quot;Язык программирования C++&quot;. Специальное издание 2011.'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-5985412607578366412</id><published>2011-01-23T14:55:00.000+03:00</published><updated>2011-01-23T14:55:49.646+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='new'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>41. Как проинициализировать динамическую переменную?</title><content type='html'>С помощью оператора new, а также его разновидностей.&lt;br /&gt;&lt;br /&gt;Динамическая переменная может инициализироваться следующими способами:&lt;br /&gt;1. &lt;pre&gt;&lt;code&gt;class A {/* определение класса */};&lt;br /&gt;A* pa = new A(); /*Какой-либо конструктор.*/&lt;br /&gt;delete pa; /*Не забываем освободить память*/&lt;/code&gt;&lt;/pre&gt;Динамическим может быть не только объект:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;int* pi = new int(1);&lt;br /&gt;cout &lt;&lt; *pi;&lt;br /&gt;delete pi;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;2. &lt;b&gt;placement new&lt;/b&gt;. Не выделяет память, а размещает объект в заранее определённом месте.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;int i = 1;&lt;br /&gt;int* j = new(&amp;i) int(2); /*Разместили по томо же адресу, что и i.*/&lt;br /&gt;cout &lt;&lt; i &lt;&lt; "\n"; /*Значение i затерто*/&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;3. &lt;b&gt;nothrow new&lt;/b&gt;. В случае нехватки памяти, при вызове обычного &lt;b&gt;new&lt;/b&gt;, им генерируется исключение std::bad_alloc. А &lt;b&gt;new(nothrow)&lt;/b&gt; просто возвращает 0.&lt;br /&gt;&lt;br /&gt;Пробежался по верхам, так как о new еще будут вопросы. А пока задам вопрос случайно заглянувшему читателю: бывает ли nothrow версия оператора placement new и почему?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-5985412607578366412?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/5985412607578366412/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/01/41.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/5985412607578366412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/5985412607578366412'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/01/41.html' title='41. Как проинициализировать динамическую переменную?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-1760268668382751448</id><published>2011-01-08T20:11:00.007+03:00</published><updated>2011-01-23T09:16:03.004+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>40. Приведите несколько случаев, когда конструктор вызывается неявно.</title><content type='html'>Приведение типа, передача по значению, копирование, конструирование внутренних объектов. Конструктор внутренних объектов вызывает сгенерированный конструктор по умолчанию, решил в примере не отражать, и так понятно :)&lt;br /&gt;&lt;pre&gt;&lt;code&gt;class A{&lt;br /&gt;  int x;&lt;br /&gt;public:&lt;br /&gt;  A(){};&lt;br /&gt;  A(int p):x(p){};&lt;br /&gt;  A(A const&amp; a){x = a.x;}&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;A f(A a){&lt;br /&gt;  return 3; //это return A(3); пример 3.&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;A g(A a){ &lt;br /&gt;  return a; //Вызов конструктора копирования. пример 5.&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(){&lt;br /&gt;  A a;&lt;br /&gt;  a = 1; /*это a = A(1); пример 1.*/&lt;br /&gt;  f(2); /*это f(A(2)); пример 2.*/&lt;br /&gt;  g(a); /*Вызов конструктора копирования. пример 4.*/&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-1760268668382751448?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/1760268668382751448/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/01/40.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1760268668382751448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1760268668382751448'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/01/40.html' title='40. Приведите несколько случаев, когда конструктор вызывается неявно.'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-1931381836465872682</id><published>2011-01-08T17:31:00.000+03:00</published><updated>2011-01-08T17:31:47.367+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>39. Может ли конструктор быть приватным? Какие последствия влечет за собой объявление конструктора приватным?</title><content type='html'>Может. Конструктор нельзя будет вызвать (кроме как из члена этого класса), а значит создать объект будет невозможно, если не предусмотреть способ вызова конструктора из члена класса. &lt;i&gt;Примечание: если мы объявили какой-нибудь конструктор, даже приватный, то конструктор по умолчанию создан не будет.&lt;/i&gt;&lt;br /&gt;Используется, например, в реализациях паттерна &lt;a href="http://ru.wikipedia.org/wiki/Singleton#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80_C.2B.2B"&gt;singleton&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-1931381836465872682?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/1931381836465872682/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/01/39.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1931381836465872682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1931381836465872682'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/01/39.html' title='39. Может ли конструктор быть приватным? Какие последствия влечет за собой объявление конструктора приватным?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-7772742277526524303</id><published>2011-01-08T16:49:00.000+03:00</published><updated>2011-01-08T16:49:31.525+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>38. Сколько конструкторов может быть в классе? Допускается ли перегрузка конструкторов? Какие виды конструкторов создаются по умолчанию?</title><content type='html'>a. С разными параметрами сколь угодно. &lt;br /&gt;b. Да. Они подчиняются тем же правилам разрешения перегрузок, что и обычные методы.&lt;br /&gt;c. Конструктор по умолчанию (без параметров), конструктор копирования.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-7772742277526524303?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/7772742277526524303/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/01/38.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7772742277526524303'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7772742277526524303'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/01/38.html' title='38. Сколько конструкторов может быть в классе? Допускается ли перегрузка конструкторов? Какие виды конструкторов создаются по умолчанию?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-7858933641993735869</id><published>2011-01-08T11:44:00.000+03:00</published><updated>2011-01-08T11:44:27.445+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='конструктор'/><title type='text'>37. Дайте определение конструктора. Каково назначение конструктора? Перечислите отличия конструктора от метода.</title><content type='html'>Ответ вкратце, благо информация по этому вопросу есть в любой книге.&lt;br /&gt;a, b. Особый метод предназначенный для инициализации объектов класса.&lt;br /&gt;c. Конструктор не возвращает значение, не наследуется&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-7858933641993735869?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/7858933641993735869/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2011/01/37.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7858933641993735869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7858933641993735869'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2011/01/37.html' title='37. Дайте определение конструктора. Каково назначение конструктора? Перечислите отличия конструктора от метода.'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-1811703242465885237</id><published>2010-11-23T14:25:00.001+03:00</published><updated>2010-11-23T14:26:34.511+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='дружественная функция'/><title type='text'>36. Дайте определение дружественной функции. Как объявляется дружественная функция? А как определяется?</title><content type='html'>Функция может быть дружественнной не сама по себе, а только по отношению к другим классам. Функция дружественная классу - обычная функция, которой доступны скрытые и защищенные члены этого класса.&lt;br /&gt;&lt;br /&gt;Объявляется и определяется точно так же как и обычная функция. Но чтобы объявить ее дружественной некоторому классу, этот класс сам должен указать у себя в объявлении этот факт ключевым словом friend&lt;br /&gt;&lt;br /&gt;Пример:&lt;pre&gt;&lt;code&gt;class A{&lt;br /&gt;friend void f(A&amp; a);&lt;br /&gt;int x;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;void f(A&amp; a){a.x = 1;}&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-1811703242465885237?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/1811703242465885237/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/11/36.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1811703242465885237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1811703242465885237'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/11/36.html' title='36. Дайте определение дружественной функции. Как объявляется дружественная функция? А как определяется?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-8812602261391575508</id><published>2010-11-23T13:45:00.000+03:00</published><updated>2010-11-23T13:45:14.848+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>35. Какие операции разрешается перегружать только как методы класса?</title><content type='html'>= [] () -&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-8812602261391575508?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/8812602261391575508/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/11/35.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/8812602261391575508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/8812602261391575508'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/11/35.html' title='35. Какие операции разрешается перегружать только как методы класса?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-7561632729289917930</id><published>2010-11-14T10:34:00.000+03:00</published><updated>2010-11-14T10:34:57.846+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='оператор'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>34. Какие операции не рекомендуется перегружать как методы класса? Почему?</title><content type='html'>Даже и не знаю. Страуструп рекомендует перегружать как методы класса только те операторы, которым требуется изменить защищенные члены. Например:&lt;pre&gt;&lt;code&gt;class A{&lt;br /&gt;  int x;&lt;br /&gt;public:&lt;br /&gt;  A&amp; operator+=(int b){x+=b;} //Этому оператор изменяет защищенный член&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//А этому не нужно менять, и он может воспользоваться оператором +=&lt;br /&gt;A operator+(A&amp; a, int b){A res = a; return res+=b;}&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-7561632729289917930?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/7561632729289917930/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/11/34.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7561632729289917930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7561632729289917930'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/11/34.html' title='34. Какие операции не рекомендуется перегружать как методы класса? Почему?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-387061254779467690</id><published>2010-11-14T10:18:00.000+03:00</published><updated>2010-11-14T10:18:37.826+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='оператор'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='this'/><title type='text'>33. Что означает выражение *this? В каких случаях оно используется?</title><content type='html'>Разыменованный указатель на себя. Часто используется, если функции-члену класса нужно вернуть ссылку на текущий объект: &lt;pre&gt;&lt;code&gt;class A{&lt;br /&gt;  int x;&lt;br /&gt;public:&lt;br /&gt;  A&amp; operator=(const A&amp; a){x = a.x; return *this;} &lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-387061254779467690?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/387061254779467690/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/11/33-this.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/387061254779467690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/387061254779467690'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/11/33-this.html' title='33. Что означает выражение *this? В каких случаях оно используется?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-6483033258694414291</id><published>2010-11-14T10:08:00.004+03:00</published><updated>2010-11-14T10:09:58.739+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='оператор'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>32. Как различаются перегруженная префиксная и постфиксная операции инкремента и декремента?</title><content type='html'>Выражение ++a компилятор превращает в вызов operator++(a), а для a++ в вызов operator++(a, int). Параметр int добавлен только для различия сигнатур функций и его значение не используется. Аналогично для декремента.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-6483033258694414291?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/6483033258694414291/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/11/32.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6483033258694414291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6483033258694414291'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/11/32.html' title='32. Как различаются перегруженная префиксная и постфиксная операции инкремента и декремента?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-1796616597476118487</id><published>2010-11-14T10:07:00.000+03:00</published><updated>2010-11-14T10:07:49.494+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='оператор'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>31. Какой результат должны возвращать операции с присваиванием?</title><content type='html'>Вообще говоря, ничего они не должны. Однако, для всех классов, по умолчанию, этот оператор означает копирование объекта и возвращение ссылки. Поэтому, при переопределении оператора, отступать от этого правила нежелательно. Но мы не обязаны использовать этот оператор только для копирования объектов.&lt;pre&gt;&lt;code&gt;&lt;br /&gt;class A{&lt;br /&gt;public:&lt;br /&gt;  int x;&lt;br /&gt;  A&amp; operator=(const A&amp; a){x = a.x; return *this;} //переопределили стандартное поведение&lt;br /&gt;  void operator=(int xx){x=xx;} //определили поведение при присваивании целого. Но здесь тоже можно вернуть *this.&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int main(){&lt;br /&gt;  A a;&lt;br /&gt;  a=1;&lt;br /&gt;  A a2;&lt;br /&gt;  std::cout &lt;&lt; (a2=a).x;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-1796616597476118487?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/1796616597476118487/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/11/31.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1796616597476118487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1796616597476118487'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/11/31.html' title='31. Какой результат должны возвращать операции с присваиванием?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-46735804489580979</id><published>2010-10-29T16:26:00.000+04:00</published><updated>2010-10-29T16:26:14.699+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='оператор'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='перегрузка'/><title type='text'>30. Перечислите особенности перегрузки операций как методов класса. Чем отличается перегрузка внешним образом от перегрузки как метода класса?</title><content type='html'>&lt;ul&gt;&lt;li&gt;Первый параметр оператора опускается, им становится экземпляр класса (this).&lt;/li&gt;&lt;li&gt;Его можно сделать константным методом.&lt;/li&gt;&lt;li&gt;У него имеется доступ к не-public членам.&lt;/li&gt;&lt;li&gt;Оператор можно сделать виртуальным.&lt;/li&gt;&lt;/ul&gt;Этим и отличается.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-46735804489580979?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/46735804489580979/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/30.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/46735804489580979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/46735804489580979'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/30.html' title='30. Перечислите особенности перегрузки операций как методов класса. Чем отличается перегрузка внешним образом от перегрузки как метода класса?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-1238440150026760511</id><published>2010-10-27T20:44:00.000+04:00</published><updated>2010-10-27T20:44:40.636+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='оператор'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='перегрузка'/><title type='text'>29. Можно ли определить новую операцию?</title><content type='html'>Нельзя. Технически это было бы несложно, но создало бы больше проблем, чем решило. Допустим, мы решили добавить операцию **, означающую в некоторых языках возведение в степень. Посмотрим, какие возникают трудности.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Неоднозначность. Как интерпретировать a**b? (a)**(b) или a*(*b). Заметьте, оба варианта синтаксически корректны, но имеют разный смысл. Придется создавать правила для разрешения этой ситуации.&lt;/li&gt;&lt;li&gt;Ассоциативность. Чему эквивалентно a**b**c? (a**b)**c или a**(b**c)?&lt;/li&gt;&lt;li&gt;Приоритет. Чему эквивалентно a+b**c? (a+b)**c или a+(b**c)?&lt;/li&gt;&lt;/ul&gt;Напоминаю, с точки зрения разработчика языка, проблемы не являются неразрешимыми. В некоторых языках есть такая возможность.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-1238440150026760511?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/1238440150026760511/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/29.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1238440150026760511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1238440150026760511'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/29.html' title='29. Можно ли определить новую операцию?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-9159707700462771761</id><published>2010-10-26T20:23:00.000+04:00</published><updated>2010-10-26T20:23:40.718+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='оператор'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='перегрузка'/><title type='text'>28. Можно ли при перегрузке изменить приоритет операции?</title><content type='html'>К счастью, нет :) Это создало бы слишком много проблем.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-9159707700462771761?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/9159707700462771761/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/28.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/9159707700462771761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/9159707700462771761'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/28.html' title='28. Можно ли при перегрузке изменить приоритет операции?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-6675133342261840410</id><published>2010-10-25T22:39:00.000+04:00</published><updated>2010-10-25T22:39:21.371+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='оператор'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='перегрузка'/><title type='text'>27. Можно ли перегружать операции для встроенных типов данных?</title><content type='html'>Нет. Вообще, хотя бы одно из значений оператора должно являться пользовательским типом.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-6675133342261840410?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/6675133342261840410/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/27.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6675133342261840410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6675133342261840410'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/27.html' title='27. Можно ли перегружать операции для встроенных типов данных?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-4440906376788848917</id><published>2010-10-24T18:49:00.000+04:00</published><updated>2010-10-24T18:49:41.184+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sizeof'/><category scheme='http://www.blogger.com/atom/ns#' term='оператор'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='перегрузка'/><category scheme='http://www.blogger.com/atom/ns#' term='typeid'/><title type='text'>26. Какие операции нельзя перегружать? Как вы думаете, почему?</title><content type='html'>По-моему, чаще используется слово "оператор", я так и буду их называть.&lt;br /&gt;Перегружать можно следующие операторы:&lt;br /&gt;&lt;code&gt;+ - * / % ^ &amp; | ~ ! = &lt; &gt;&lt;br /&gt;+= -= *= /= %= ^= &amp;= |=&lt;br /&gt;&lt;&lt; &gt;&gt; &gt;&gt;= &lt;&lt;= == != &lt;= &gt;=&lt;br /&gt;&amp;&amp; || ++ -- -&gt;* , -&gt; [] ()&lt;br /&gt;new new[] delete delete[]&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;А нельзя (подсмотрел у Страуструпа):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;::&lt;/code&gt; (разрешение области видимости)&lt;/li&gt;&lt;li&gt;&lt;code&gt;.&amp;nbsp;&lt;/code&gt; (выбор члена)&lt;/li&gt;&lt;li&gt;&lt;code&gt;.*&lt;/code&gt; (выбор члена через указатель на член)&lt;/li&gt;&lt;li&gt;&lt;code&gt;?:&lt;/code&gt; тернарный оператор&lt;/li&gt;&lt;li&gt;&lt;code&gt;sizeof, typeid&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;У первых трех в правой части имя, а не значение. У тернарного оператора аж 3 параметра, к тому же его возвращаемое значение является l-value. Переопределять sizeof, typeid, думаю, просто нет смысла.   &lt;br /&gt;Также нельзя определить новые лексемы.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-4440906376788848917?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/4440906376788848917/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/26.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4440906376788848917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4440906376788848917'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/26.html' title='26. Какие операции нельзя перегружать? Как вы думаете, почему?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-4073659616270493950</id><published>2010-10-23T19:43:00.001+04:00</published><updated>2010-10-26T20:11:51.496+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='размер'/><title type='text'>Размер объекта (класса). Что на него влияет.</title><content type='html'>Раз уж начались вопросы о размере объекта, то перечислим все факторы, влияющие на размер.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Нестатические члены&lt;/li&gt;&lt;li&gt;Выравнивание&lt;/li&gt;&lt;li&gt;Наличие виртуальных методов (+размер указателя на таблицу виртуальных методов)&lt;/li&gt;&lt;li&gt;Количество виртуально пронаследованных классов в иерархии наследования (+размер указателя на таблицу виртуальных методов каждого такого класса)&lt;/li&gt;&lt;/ol&gt;Вот и все.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-4073659616270493950?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/4073659616270493950/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4073659616270493950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4073659616270493950'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/blog-post.html' title='Размер объекта (класса). Что на него влияет.'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-5297721127645578808</id><published>2010-10-23T13:56:00.000+04:00</published><updated>2010-10-23T13:56:42.975+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='структура'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='размер'/><title type='text'>25. Одинаков ли размер класса и аналогичной структуры?</title><content type='html'>Да. У структуры всего одно отличие: доступ к членам по умолчанию открыт (public)  &lt;br /&gt;&lt;br /&gt;&lt;i&gt;см. также:&lt;/i&gt;&lt;br /&gt;&lt;a href="http://ffil.blogspot.com/2010/10/6.html"&gt;6. Является ли структура классом? Чем класс отличается от структуры?&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ffil.blogspot.com/2010/10/10-public-private.html"&gt;10. Для чего используются ключевые слова public и private?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-5297721127645578808?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/5297721127645578808/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/25.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/5297721127645578808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/5297721127645578808'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/25.html' title='25. Одинаков ли размер класса и аналогичной структуры?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-6522098172286406461</id><published>2010-10-22T23:42:00.001+04:00</published><updated>2010-10-23T00:09:41.822+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='метод'/><title type='text'>24. Влияют ли методы на размер объекта?</title><content type='html'>Нет. Метод класса един для всех объектов класса, и разумеется, не создается каждый раз при создании объекта. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;см. также:&lt;/i&gt;&lt;br /&gt;&lt;a href="http://ffil.blogspot.com/2010/10/14.html"&gt;14. Что такое метод? Как вызывается метод?&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-6522098172286406461?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/6522098172286406461/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/24.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6522098172286406461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6522098172286406461'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/24.html' title='24. Влияют ли методы на размер объекта?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-4068035973633913918</id><published>2010-10-21T22:15:00.000+04:00</published><updated>2010-10-21T22:15:26.253+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='размер'/><title type='text'>23. Каков размер «пустого» объекта?</title><content type='html'>&lt;pre&gt;&lt;code&gt;class A{&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;В теории не меньше одного байта. На практике ровно один байт. Не ноль потому, что, согласно спецификации, каждый объект должен иметь свой адрес. Объекты с нулевым размером запросто могли иметь один и тот же адрес.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-4068035973633913918?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/4068035973633913918/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/23.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4068035973633913918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4068035973633913918'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/23.html' title='23. Каков размер «пустого» объекта?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-4990030814206725126</id><published>2010-10-20T17:51:00.001+04:00</published><updated>2010-10-23T18:21:07.103+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sizeof'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='размер'/><title type='text'>22. Сколько места в памяти занимает объект класса? Как это узнать?</title><content type='html'>sizeof()&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-4990030814206725126?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/4990030814206725126/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/22.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4990030814206725126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4990030814206725126'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/22.html' title='22. Сколько места в памяти занимает объект класса? Как это узнать?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-8846115101623895866</id><published>2010-10-19T15:51:00.003+04:00</published><updated>2010-10-19T16:14:57.130+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='полиморфизм'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>21. Объясните принцип полиморфизма.</title><content type='html'>Неинтересный вопрос. В том смысле, что в двух словах не рассказать, а расписывать подробно не хочу. О полиморфизме и так много информации в книгах и интернете. Понравилось в Википедии: Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций». И от себя неплохой, как мне кажется, примерчик.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;class Animal{&lt;br /&gt;public:&lt;br /&gt;  virtual string voice() = 0;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class Cat: public Animal {&lt;br /&gt;public:&lt;br /&gt;  string voice(){return "Мяу!";}&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;class Dog: public Animal {&lt;br /&gt;public:&lt;br /&gt;  string voice(){return "Гав!";}&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;void printVoice(Animal* animal){&lt;br /&gt;  cout &lt;&lt; animal-&gt;voice(); //Здесь происходит полиморфизм. &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;  Animal* animal1 = new Cat;&lt;br /&gt;  Animal* animal2 = new Dog;&lt;br /&gt;&lt;br /&gt;  printVoice(animal1);&lt;br /&gt;  printVoice(animal2);&lt;br /&gt;&lt;br /&gt;  delete animal1;&lt;br /&gt;  delete animal2;&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-8846115101623895866?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/8846115101623895866/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/21.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/8846115101623895866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/8846115101623895866'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/21.html' title='21. Объясните принцип полиморфизма.'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-2576169311100332441</id><published>2010-10-18T20:41:00.002+04:00</published><updated>2010-10-18T20:50:55.922+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='константный метод'/><category scheme='http://www.blogger.com/atom/ns#' term='константный объект'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>20. Может ли константный метод вызываться для объектов-переменных? А обычный метод — для объектов-констант?</title><content type='html'>Проще всего посмотреть самому:&lt;pre&gt;&lt;code class="c++"&gt;class A{&lt;br /&gt;public:&lt;br /&gt;  void f1() {}&lt;br /&gt;  void f2() const {}&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;  A a;&lt;br /&gt;  const A&amp; ac = a;&lt;br /&gt;&lt;br /&gt;  a.f1();&lt;br /&gt;  a.f2();&lt;br /&gt;  ac.f1(); //ошибка!&lt;br /&gt;  ac.f2();&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt; Вывод: нельзя вызывать неконстантные функции константных объектов. Но деструктор &lt;a href="http://alenacpp.blogspot.com/2009/10/blog-post.html"&gt;можно&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-2576169311100332441?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/2576169311100332441/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/20.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2576169311100332441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2576169311100332441'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/20.html' title='20. Может ли константный метод вызываться для объектов-переменных? А обычный метод — для объектов-констант?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-4134104632350709042</id><published>2010-10-17T21:17:00.003+04:00</published><updated>2010-10-18T20:22:59.685+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='константный метод'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>19. Зачем нужны константные методы? Чем отличается определение константного метода от обычного?</title><content type='html'>a. Для отмечания факта, что метод не изменяет члены класса. Компилятор пресечет попытки такого случайного вмешательства. Следующий вопрос посвящен вызову константных методов.&lt;br /&gt;b. void A::f() const {/*...*/}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-4134104632350709042?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/4134104632350709042/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/19.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4134104632350709042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4134104632350709042'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/19.html' title='19. Зачем нужны константные методы? Чем отличается определение константного метода от обычного?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-7511035409169013604</id><published>2010-10-16T21:56:00.002+04:00</published><updated>2010-10-16T22:17:13.445+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='this'/><title type='text'>18. Что обозначается ключевым словом this?</title><content type='html'>В каждой нестатической функции-члене класса this является указателем на объект, для которого вызвана функция. Страуструп пишет, что это не совсем обычная переменная и невозможно получить ее адрес. Мне не очень понятно это ограничение. Тем более, программа, откомпилированная MinGW, прекрасно вывела этот адрес.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-7511035409169013604?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/7511035409169013604/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/18-this.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7511035409169013604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7511035409169013604'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/18-this.html' title='18. Что обозначается ключевым словом this?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-3679201297280708687</id><published>2010-10-15T22:48:00.004+04:00</published><updated>2010-10-18T20:39:33.421+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>17. Можно в методах присваивать параметрам значения по умолчанию?</title><content type='html'>Так же, как и в обычных функциях.&lt;br /&gt;&lt;br /&gt;Это можно сделать либо в объявлении класса:&lt;br /&gt;&lt;pre&gt;&lt;code class="c++"&gt;class A { &lt;br /&gt;&amp;nbsp; int f(float c = 3.14);&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;Либо при определении функции:&lt;br /&gt;int A::f(float c = 3.14);&lt;br /&gt;&lt;br /&gt;Но не там и там одновременно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-3679201297280708687?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/3679201297280708687/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/17.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/3679201297280708687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/3679201297280708687'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/17.html' title='17. Можно в методах присваивать параметрам значения по умолчанию?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-7527544661386079842</id><published>2010-10-15T20:35:00.002+04:00</published><updated>2010-10-15T22:30:11.898+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='встроенная функция'/><category scheme='http://www.blogger.com/atom/ns#' term='inline'/><title type='text'>Inline. Встроенные функции.</title><content type='html'>Раз уж в 16 вопросе были упомянуты встроенные функции, думаю, хорошо было бы рассказать о них подробнее. Как уже сказано, компилятор будет пытаться заменять вызовы таких функций непосредственно на их определения. Например:&lt;br /&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;inline&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; plusOne&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt; n&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008000"&gt;{&lt;/font&gt;&lt;br /&gt;  &lt;font color="#0000ff"&gt;return&lt;/font&gt; n&lt;font color="#000040"&gt;+&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff0000"&gt;&lt;i&gt;/*...*/&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt; k&lt;font color="#000080"&gt;=&lt;/font&gt;&lt;font color="#0000dd"&gt;5&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000dd"&gt;cout&lt;/font&gt; &lt;font color="#000080"&gt;&amp;lt;&amp;lt;&lt;/font&gt; plusOne&lt;font color="#008000"&gt;(&lt;/font&gt;k&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;Компилятор заменит plusOne(k) на (k+1), подставив k вместо n в определении функции. Рассмотрим более интересный пример:&lt;br /&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&lt;br /&gt;&lt;font color="#666666"&gt;//рекурсивное вычисление факториала:&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;inline&lt;/font&gt; &lt;font color="#0000ff"&gt;int&lt;/font&gt; fact&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt; n&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008000"&gt;{&lt;/font&gt;&lt;br /&gt;&amp;nbsp; &lt;font color="#0000ff"&gt;return&lt;/font&gt; n&lt;font color="#000040"&gt;!&lt;/font&gt;&lt;font color="#000080"&gt;=&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt; &lt;font color="#008080"&gt;?&lt;/font&gt; n&lt;font color="#000040"&gt;*&lt;/font&gt;fact&lt;font color="#008000"&gt;(&lt;/font&gt;n&lt;font color="#000040"&gt;-&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt; &lt;font color="#008080"&gt;:&lt;/font&gt; &lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#008000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;font color="#ff0000"&gt;&lt;i&gt;/*...*/&lt;/i&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000dd"&gt;cout&lt;/font&gt; &lt;font color="#000080"&gt;&amp;lt;&amp;lt;&lt;/font&gt; fact&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#0000dd"&gt;3&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;Действия компилятора с этим выражением по шагам:&lt;br /&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&lt;ol class="cpp" style="font-family:monospace;"&gt;&lt;li style="font-weight: normal; vertical-align:top;"&gt;&lt;div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"&gt;&lt;font color="#0000dd"&gt;cout&lt;/font&gt; &lt;font color="#000080"&gt;&amp;lt;&amp;lt;&lt;/font&gt; &lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#0000dd"&gt;3&lt;/font&gt;&lt;font color="#000040"&gt;!&lt;/font&gt;&lt;font color="#000080"&gt;=&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt; &lt;font color="#008080"&gt;?&lt;/font&gt; &lt;font color="#0000dd"&gt;3&lt;/font&gt;&lt;font color="#000040"&gt;*&lt;/font&gt;fact&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#0000dd"&gt;3&lt;/font&gt;&lt;font color="#000040"&gt;-&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt; &lt;font color="#008080"&gt;:&lt;/font&gt; &lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt; &lt;font color="#666666"&gt;//заменил вызов определением&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="font-weight: normal; vertical-align:top;"&gt;&lt;div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"&gt;&lt;font color="#0000dd"&gt;cout&lt;/font&gt; &lt;font color="#000080"&gt;&amp;lt;&amp;lt;&lt;/font&gt; &lt;font color="#0000dd"&gt;3&lt;/font&gt;&lt;font color="#000040"&gt;*&lt;/font&gt;fact&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#0000dd"&gt;2&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt; &lt;font color="#666666"&gt;//наш компилятор не дурак - упростил выражение&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="font-weight: normal; vertical-align:top;"&gt;&lt;div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"&gt;&lt;font color="#0000dd"&gt;cout&lt;/font&gt; &lt;font color="#000080"&gt;&amp;lt;&amp;lt;&lt;/font&gt; &lt;font color="#0000dd"&gt;3&lt;/font&gt;&lt;font color="#000040"&gt;*&lt;/font&gt;&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#0000dd"&gt;2&lt;/font&gt;&lt;font color="#000040"&gt;!&lt;/font&gt;&lt;font color="#000080"&gt;=&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt; &lt;font color="#008080"&gt;?&lt;/font&gt; &lt;font color="#0000dd"&gt;2&lt;/font&gt;&lt;font color="#000040"&gt;*&lt;/font&gt;fact&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#0000dd"&gt;2&lt;/font&gt;&lt;font color="#000040"&gt;-&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt; &lt;font color="#008080"&gt;:&lt;/font&gt; &lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt; &lt;font color="#666666"&gt;//заменил&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="font-weight: normal; vertical-align:top;"&gt;&lt;div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"&gt;&lt;font color="#0000dd"&gt;cout&lt;/font&gt; &lt;font color="#000080"&gt;&amp;lt;&amp;lt;&lt;/font&gt; &lt;font color="#0000dd"&gt;6&lt;/font&gt;&lt;font color="#000040"&gt;*&lt;/font&gt;fact&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt; &lt;font color="#666666"&gt;//упростил&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="font-weight: bold; vertical-align:top;"&gt;&lt;div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"&gt;&lt;font color="#0000dd"&gt;cout&lt;/font&gt; &lt;font color="#000080"&gt;&amp;lt;&amp;lt;&lt;/font&gt; &lt;font color="#0000dd"&gt;6&lt;/font&gt;&lt;font color="#000040"&gt;*&lt;/font&gt;&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#000040"&gt;!&lt;/font&gt;&lt;font color="#000080"&gt;=&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt; &lt;font color="#008080"&gt;?&lt;/font&gt; &lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#000040"&gt;*&lt;/font&gt;fact&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#000040"&gt;-&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt; &lt;font color="#008080"&gt;:&lt;/font&gt; &lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt; &lt;font color="#666666"&gt;//вызов fact уже не нужен, так как условие не выполняется.&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="font-weight: normal; vertical-align:top;"&gt;&lt;div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"&gt;&lt;font color="#0000dd"&gt;cout&lt;/font&gt; &lt;font color="#000080"&gt;&amp;lt;&amp;lt;&lt;/font&gt; &lt;font color="#0000dd"&gt;6&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt; &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/font&gt;&lt;/code&gt;Теперь такое выражение:&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&lt;br /&gt;&lt;font color="#0000dd"&gt;cout&lt;/font&gt; &lt;font color="#000080"&gt;&amp;lt;&amp;lt;&lt;/font&gt; fact&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#0000dd"&gt;100&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;Что будет делать компилятор? Заменять вызов 100 раз? А если написать fact(1000)? А если так:&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt; k&lt;font color="#008080"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000dd"&gt;cin&lt;/font&gt; &lt;font color="#000080"&gt;&amp;gt;&amp;gt;&lt;/font&gt; k&lt;font color="#008080"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000dd"&gt;cout&lt;/font&gt; &lt;font color="#000080"&gt;&amp;lt;&amp;lt;&lt;/font&gt; fact&lt;font color="#008000"&gt;(&lt;/font&gt;k&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;Опять рассмотрим по шагам:&lt;br /&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&lt;ol class="cpp" style="font-family:monospace;"&gt;&lt;li style="font-weight: normal; vertical-align:top;"&gt;&lt;div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"&gt;&lt;font color="#0000dd"&gt;cout&lt;/font&gt; &lt;font color="#000080"&gt;&amp;lt;&amp;lt;&lt;/font&gt; &lt;font color="#008000"&gt;(&lt;/font&gt;k&lt;font color="#000040"&gt;!&lt;/font&gt;&lt;font color="#000080"&gt;=&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt; &lt;font color="#008080"&gt;?&lt;/font&gt; k&lt;font color="#000040"&gt;*&lt;/font&gt;fact&lt;font color="#008000"&gt;(&lt;/font&gt;k&lt;font color="#000040"&gt;-&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt; &lt;font color="#008080"&gt;:&lt;/font&gt; &lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt; &lt;font color="#666666"&gt;//Это уже не упростить. Ладно, заменим fact(k-1)&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="font-weight: normal; vertical-align:top;"&gt;&lt;div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"&gt;&lt;font color="#0000dd"&gt;cout&lt;/font&gt; &lt;font color="#000080"&gt;&amp;lt;&amp;lt;&lt;/font&gt; &lt;font color="#008000"&gt;(&lt;/font&gt;k&lt;font color="#000040"&gt;!&lt;/font&gt;&lt;font color="#000080"&gt;=&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt; &lt;font color="#008080"&gt;?&lt;/font&gt; k&lt;font color="#000040"&gt;*&lt;/font&gt;&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#008000"&gt;(&lt;/font&gt;k&lt;font color="#000040"&gt;-&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#000040"&gt;!&lt;/font&gt;&lt;font color="#000080"&gt;=&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt; &lt;font color="#008080"&gt;?&lt;/font&gt; &lt;font color="#008000"&gt;(&lt;/font&gt;k&lt;font color="#000040"&gt;-&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#000040"&gt;*&lt;/font&gt;fact&lt;font color="#008000"&gt;(&lt;/font&gt;k&lt;font color="#000040"&gt;-&lt;/font&gt;&lt;font color="#0000dd"&gt;2&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt; &lt;font color="#008080"&gt;:&lt;/font&gt; &lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt; &lt;font color="#008080"&gt;:&lt;/font&gt; &lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt; &lt;font color="#666666"&gt;//Нда... Продолжаем?&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;li style="font-weight: normal; vertical-align:top;"&gt;&lt;div style="font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;"&gt;&lt;font color="#0000dd"&gt;cout&lt;/font&gt; &lt;font color="#000080"&gt;&amp;lt;&amp;lt;&lt;/font&gt; &lt;font color="#008000"&gt;(&lt;/font&gt;k&lt;font color="#000040"&gt;!&lt;/font&gt;&lt;font color="#000080"&gt;=&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt; &lt;font color="#008080"&gt;?&lt;/font&gt; k&lt;font color="#000040"&gt;*&lt;/font&gt;&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#008000"&gt;(&lt;/font&gt;k&lt;font color="#000040"&gt;-&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#000040"&gt;!&lt;/font&gt;&lt;font color="#000080"&gt;=&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt; &lt;font color="#008080"&gt;?&lt;/font&gt; &lt;font color="#008000"&gt;(&lt;/font&gt;k&lt;font color="#000040"&gt;-&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#000040"&gt;*&lt;/font&gt;&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#008000"&gt;(&lt;/font&gt;k&lt;font color="#000040"&gt;-&lt;/font&gt;&lt;font color="#0000dd"&gt;2&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#000040"&gt;!&lt;/font&gt;&lt;font color="#000080"&gt;=&lt;/font&gt;&lt;font color="#0000dd"&gt;1&lt;/font&gt; &lt;font color="#008080"&gt;?&lt;/font&gt; &lt;font color="#008000"&gt;(&lt;/font&gt;k&lt;font color="#000040"&gt;-&lt;/font&gt;&lt;font color="#0000dd"&gt;2&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#000040"&gt;*&lt;/font&gt;fact&lt;font color="#008000"&gt;(&lt;/font&gt;k&lt;font color="#000040"&gt;-&lt;/font&gt;&lt;font color="#0000dd"&gt;3&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt; &lt;font color="#008080"&gt;:&lt;/font&gt; &lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt; &lt;font color="#008080"&gt;:&lt;/font&gt; &lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt; &lt;font color="#008080"&gt;:&lt;/font&gt; &lt;font color="#0000dd"&gt;1&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt; &lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/font&gt;&lt;/code&gt;&lt;br /&gt;Ну все-все, хватит. Компилятор тоже не будет долго церемониться. Если глубина замен вызовов слишком велика, он плюнет на inline, и оставит вызов функции без замены.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-7527544661386079842?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/7527544661386079842/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/inline.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7527544661386079842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7527544661386079842'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/inline.html' title='Inline. Встроенные функции.'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-6857065570305249296</id><published>2010-10-14T20:23:00.004+04:00</published><updated>2010-10-15T22:31:18.116+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='встроенная функция'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='inline'/><title type='text'>16. Как определить метод непосредственно внутри класса? А вне класса? Чем эти определения отличаются?</title><content type='html'>a.&lt;br /&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;class&lt;/span&gt; A {&lt;br /&gt;&amp;nbsp; int f(){return 0;}&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;b.&lt;br /&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;class&lt;/span&gt; A {&lt;br /&gt;&amp;nbsp; int f();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int A::f(){return 0;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;c. Эти классы практически идентичны, но есть небольшое отличие. Определение первого класса эквивалентено:&lt;br /&gt;&lt;code&gt;&lt;span style="font-weight:bold;"&gt;class&lt;/span&gt; A {&lt;br /&gt;&amp;nbsp; int f();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;inline&lt;/span&gt; int A::f(){return 0;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;То есть, оно отличается от второго наличием ключевого слова inline. Оно означает, что компилятор постарается(так как это не всегда возможно) заменить вызов этой функции его определением. Рекомендуется не использовать вариант a (желательно использовать эквивалентную запись), так как смешиваются "что делает класс" и "как это делает".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-6857065570305249296?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/6857065570305249296/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/16.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6857065570305249296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6857065570305249296'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/16.html' title='16. Как определить метод непосредственно внутри класса? А вне класса? Чем эти определения отличаются?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-7815254081130082729</id><published>2010-10-13T20:45:00.004+04:00</published><updated>2010-10-14T10:39:26.432+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='доступ'/><category scheme='http://www.blogger.com/atom/ns#' term='класс'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='метод'/><title type='text'>15. Может ли метод быть приватный?</title><content type='html'>Конечно.&lt;br /&gt;Представим функцию:&lt;code&gt;&lt;br /&gt;void A::save(){&lt;br /&gt;&amp;nbsp; if(check()){&lt;br /&gt;&amp;nbsp; &amp;nbsp; commit();&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Перед принятием изменений происодит проверка, все хорошо и логично. Если бы нельзя было сделать commit() приватной, то пользователь данного класса мог бы напрямую вызвать commit() без проверки, что может быть опасно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-7815254081130082729?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/7815254081130082729/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/15.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7815254081130082729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7815254081130082729'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/15.html' title='15. Может ли метод быть приватный?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-6553293235636526113</id><published>2010-10-12T20:02:00.004+04:00</published><updated>2010-10-23T00:07:21.516+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='метод'/><title type='text'>14. Что такое метод? Как вызывается метод?</title><content type='html'>&lt;b&gt;а&lt;/b&gt;. Функция, принадлежащая классу. Методу доступны все поля класса (которому он принадлежит).&lt;br /&gt;&lt;b&gt;б&lt;/b&gt;. &lt;pre&gt;&lt;code&gt;class A{&lt;br /&gt;  public:&lt;br /&gt;  void f(int p);&lt;br /&gt;};&lt;/code&gt;&lt;/pre&gt;&lt;i&gt;1.&lt;/i&gt; Допустим, есть объявление: A a;&lt;br /&gt;&lt;code&gt;a.f(5); //вызов&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;2.&lt;/i&gt; Если есть указатель на A (A* pa), то:&lt;br /&gt;&lt;i&gt;2а.&lt;/i&gt; &lt;code&gt;(*pa).f(5); //вызов&lt;/code&gt;&lt;br /&gt;&lt;i&gt;2б.&lt;/i&gt; &lt;code&gt;pa-&gt;f(5); //синтаксически более удобный и рекомендуемый вызов.&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Дополнение:&lt;/i&gt;&lt;br /&gt;При инициализации класса A, в памяти создается метод f. На низком уровне он представляет собой обычную функцию с дополнительным параметром this (указатель на объект, вызвавший функцию). Поэтому a.f(5) заменяется компилятором на что-то вроде:&lt;pre&gt;&lt;code&gt;A__f(&amp;a, 5);&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-6553293235636526113?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/6553293235636526113/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/14.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6553293235636526113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6553293235636526113'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/14.html' title='14. Что такое метод? Как вызывается метод?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-121597682977230599</id><published>2010-10-11T23:16:00.003+04:00</published><updated>2010-10-14T10:42:24.992+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='доступ'/><category scheme='http://www.blogger.com/atom/ns#' term='класс'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>13. Обязательно ли делать поля класса приватными?</title><content type='html'>Конечно нет (Обычно, если все поля класса открытые, класс объявляют с помощью struct, но это только по желанию)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-121597682977230599?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/121597682977230599/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/13.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/121597682977230599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/121597682977230599'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/13.html' title='13. Обязательно ли делать поля класса приватными?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-7028967881833895491</id><published>2010-10-10T10:50:00.002+04:00</published><updated>2010-10-10T11:00:23.636+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>12. Существуют ли ограничения на использование public и private в классе? А в структуре?</title><content type='html'>Нет. Эти модификаторы(а также protected) могут следовать в любом порядке, и встречаться в определении класса более одного раза. Влияние модификатора продолжается до следующего модификатора или до конца класса.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-7028967881833895491?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/7028967881833895491/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/12-public-private.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7028967881833895491'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7028967881833895491'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/12-public-private.html' title='12. Существуют ли ограничения на использование public и private в классе? А в структуре?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-6966474971493787383</id><published>2010-10-09T20:38:00.001+04:00</published><updated>2010-10-09T21:37:39.301+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>11. Можно ли использовать ключевые слова public и private в структуре?</title><content type='html'>&lt;a href="http://ffil.blogspot.com/2010/10/6.html"&gt;Да&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-6966474971493787383?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/6966474971493787383/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/11-public-private.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6966474971493787383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6966474971493787383'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/11-public-private.html' title='11. Можно ли использовать ключевые слова public и private в структуре?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-1157897273316129967</id><published>2010-10-08T11:50:00.002+04:00</published><updated>2010-10-08T12:02:24.703+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>10. Для чего используются ключевые слова public и private?</title><content type='html'>public и private (а так же protected) - модификаторы доступа.&lt;br /&gt;Public – доступ открыт всем, кто видит определение данного класса. &lt;br /&gt;Private – доступ открыт только для самого класса и друзьям (friend) данного класса.&lt;br /&gt;Следует отметить, что public, private, protected могут означать и тип наследования.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-1157897273316129967?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/1157897273316129967/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/10-public-private.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1157897273316129967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1157897273316129967'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/10-public-private.html' title='10. Для чего используются ключевые слова public и private?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-8962680267178133984</id><published>2010-10-07T22:42:00.002+04:00</published><updated>2010-10-07T22:57:14.881+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='композиция'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>9. Что такое композиция?</title><content type='html'>С точки зрения объектной модели - использование объекта как поле другого объекта. Мы используем композицию в случае если объект является составной частью другого объекта. &lt;br /&gt;&lt;code&gt;&lt;br /&gt;class Car {&lt;br /&gt;&amp;nbsp; Engine engine;&lt;br /&gt;&amp;nbsp; Wheel wheels[4];&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;В таком случае составной объект является хозяином своих объектов-частей и ответственнен за их создание и удаление.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-8962680267178133984?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/8962680267178133984/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/9.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/8962680267178133984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/8962680267178133984'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/9.html' title='9. Что такое композиция?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-5175200806826870308</id><published>2010-10-06T19:47:00.004+04:00</published><updated>2010-10-06T20:02:54.221+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>8. Объясните принцип инкапсуляции.</title><content type='html'>Инкапсуляция - сокрытие реализации класса с целью сохраниния целостности. Управляем автомобилем вы можете крутить руль, нажимать педали, переключать передачи и кое-что по-мелочи. Вам нужна возможность, например, менять концентрацию воздуха в горючей смеси или интервалы подачи искры в свечах? Спасибо, не надо.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-5175200806826870308?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/5175200806826870308/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/8.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/5175200806826870308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/5175200806826870308'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/8.html' title='8. Объясните принцип инкапсуляции.'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-2748879172201674300</id><published>2010-10-06T13:28:00.002+04:00</published><updated>2010-10-06T13:52:12.913+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QtCreator'/><title type='text'>QtCreator. Задаем опции компилятора.</title><content type='html'>В .pro файле нужно добавить один из параметров (-O2 только для примера):&lt;br /&gt;&lt;code&gt;&lt;br /&gt;QMAKE_CXXFLAGS += -O2 #опция будет включена во всех режимах компиляции.&lt;br /&gt;QMAKE_CXXFLAGS_DEBUG += -O2 #только в режиме DEBUG&lt;br /&gt;QMAKE_CXXFLAGS_RELEASE += -O2 #только в режиме RELEASE&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Еще можно написать так:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;CONFIG(debug, debug|release){&lt;br /&gt;&amp;nbsp; # Debug&lt;br /&gt;&amp;nbsp; QMAKE_CXXFLAGS += -Os&lt;br /&gt;}else{&lt;br /&gt;&amp;nbsp; # Release&lt;br /&gt;&amp;nbsp; QMAKE_CXXFLAGS += -O2&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;А вообще все параметры можно посмотреть &lt;a href="http://doc.qt.nokia.com/qmake-variable-reference.html"&gt;здесь&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-2748879172201674300?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/2748879172201674300/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/qtcreator.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2748879172201674300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2748879172201674300'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/qtcreator.html' title='QtCreator. Задаем опции компилятора.'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-9051494805104118115</id><published>2010-10-05T21:57:00.003+04:00</published><updated>2010-10-05T22:11:39.939+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='класс'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>7. Какие ключевые слова в С++ обозначают класс?</title><content type='html'>Ключевые слова - это зарезервированные идентификаторы. &lt;br /&gt;and and_eq asm auto bitand bitor bool break case catch char class compl const const_cast continue default delete do double dynamic_cast else enum explicit export extern false float for friend goto if inline int long mutable namespace new not not_eq operator or or_eq private protected public register reinterpret_cast return short signed sizeof static static_cast struct switch template this throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while xor xor_eq &lt;br /&gt;&lt;br /&gt;Из них class и struct обозначают класс.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-9051494805104118115?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/9051494805104118115/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/7.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/9051494805104118115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/9051494805104118115'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/7.html' title='7. Какие ключевые слова в С++ обозначают класс?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-8501589705565644582</id><published>2010-10-05T21:02:00.003+04:00</published><updated>2010-10-05T21:20:32.205+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QtCreator'/><category scheme='http://www.blogger.com/atom/ns#' term='ошибка'/><title type='text'>QtCreator. Не удалось сохранить сессию: /Users/%username%/AppData/Roaming/Nokia/qtcreator/default.qws</title><content type='html'>Такая ошибка появлялась у меня на Windows 7. Мой %username% - кириллический, и QtCreator, из-за проблем с кодировкой, не смог найти соответствующую папку в C:/Users. Желания заводить другого пользователя у меня не было. Пощелкав мышкой, по-кривому, но проблему решил. В QtCreator открываем: инструменты - параметры - вставка кода - основное. Видим поле "имя пользователя". У меня там крякозябры. "А-а-а", - в первый раз сказал я, и написал его нормально, по-русски. Облом, не сохраняет. Тогда я скопировал крякозябры, и создал папку с таким же именем в users. Облом. Ей еще понадобилось дать права всем на чтение и запись. Сейчас все хорошо.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-8501589705565644582?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/8501589705565644582/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/qtcreator-usersusernameappdataroamingno.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/8501589705565644582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/8501589705565644582'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/qtcreator-usersusernameappdataroamingno.html' title='QtCreator. Не удалось сохранить сессию: /Users/%username%/AppData/Roaming/Nokia/qtcreator/default.qws'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-1768776580464666193</id><published>2010-10-04T14:18:00.002+04:00</published><updated>2010-10-04T14:42:15.211+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='структура'/><category scheme='http://www.blogger.com/atom/ns#' term='класс'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>6. Является ли структура классом? Чем класс отличается от структуры?</title><content type='html'>а) Да&lt;br /&gt;б)&lt;br /&gt;класс обявленный как class имеет по умолчанию доступ private,&lt;br /&gt;класс обявленный как struct имеет по умолчанию доступ public.&lt;br /&gt;&lt;br /&gt;То есть, такие определения эквиваленты:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class A {&lt;br /&gt;/* */&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;struct A {&lt;br /&gt;private:&lt;br /&gt;/* */&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Больше отличий нет. На практике обычно структура используется как группировка переменных не требующих задавать поведение для них.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-1768776580464666193?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/1768776580464666193/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/6.html#comment-form' title='Комментарии: 6'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1768776580464666193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1768776580464666193'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/6.html' title='6. Является ли структура классом? Чем класс отличается от структуры?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-6430166200792164179</id><published>2010-10-03T23:34:00.001+04:00</published><updated>2010-10-04T00:10:45.661+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='композиция'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='агрегация'/><title type='text'>5. Как называется использование объекта одного класса в качестве поля другого класса?</title><content type='html'>Агрегация. Часто используется ее частный случай - композиция (B - составная часть A, и, в таком случае, А отвечает за создание и уничтожение B)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-6430166200792164179?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/6430166200792164179/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/5.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6430166200792164179'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6430166200792164179'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/5.html' title='5. Как называется использование объекта одного класса в качестве поля другого класса?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-4957189378625025834</id><published>2010-10-02T20:09:00.003+04:00</published><updated>2010-10-02T21:53:36.762+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ссылки'/><category scheme='http://www.blogger.com/atom/ns#' term='конструктор копирования'/><category scheme='http://www.blogger.com/atom/ns#' term='385'/><category scheme='http://www.blogger.com/atom/ns#' term='указатели'/><title type='text'>4. Допускается ли передавать объекты в качестве параметров, и какими способами? А возвращать как результат?</title><content type='html'>Так же, как и переменные основных типов - по ссылке(1) и по значению(2).&lt;br /&gt;1. С передачей по ссылке все в принципе ясно: передали ссылку и продолжаем работать с тем же объектом как ни в чем не бывало. Но мне не очень нравится такой способ. Если в коде мы видим:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;int x = 1;&lt;br /&gt;f(x);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;То мы не можем предугадать, как передан x и может ли измениться его значение в теле функции, так как определение может быть void f(int a) или void f(int &amp;a). Та же неопределенность и при передаче объекта.&lt;br /&gt;Отмечу, что возможности передачи по ссылке не было в C.&lt;br /&gt;&lt;br /&gt;2. Если мы не хотим неопределенности, то можно просто передать адрес объекта объекта с помощью указателя (произойдет передача &lt;span style="font-weight:bold;"&gt;значения&lt;/span&gt; указателя). В таком случае код, возможно выглядит не так красиво, но мне нравится больше:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;void f(A* a){/* разыменовываем: *a */}&lt;br /&gt;&lt;br /&gt;A a;&lt;br /&gt;f(&amp;a);&lt;br /&gt;&lt;/code&gt; &lt;br /&gt;При передаче объекта по значению будет передано содержимое объекта&lt;br /&gt;&lt;code&gt;&lt;br /&gt;void f(A a){/* разыменовываем: *a */}&lt;br /&gt;&lt;br /&gt;A a;&lt;br /&gt;f(a);&lt;br /&gt;&lt;/code&gt; &lt;br /&gt;Будет вызван конструктор копирования.&lt;br /&gt;&lt;br /&gt;Возврат результата производится аналогичными способами. Однако важно проследить за временем жизни объекта, иначе можно вернуть ссылку или указатель на уже несуществующий объект. При передаче по значению будет вызван конструктор копирования.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-4957189378625025834?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/4957189378625025834/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/10/4.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4957189378625025834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4957189378625025834'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/10/4.html' title='4. Допускается ли передавать объекты в качестве параметров, и какими способами? А возвращать как результат?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-2910522488994519482</id><published>2010-10-01T16:19:00.000+04:00</published><updated>2010-10-01T22:06:31.277+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>3. Разрешается ли объявлять указатель на объект? А указатель на класс?</title><content type='html'>Я много писал об указателях. Ясно, что объявлять указатель на объект конечно же можно.&lt;br /&gt;Вообще говоря, на физическом уровне указатель представляет собой 4 байта, хранящие некоторый адрес. Теоретически можно объявить указатель на все что угодно, что занимает место в оперативной памяти. Но класс не хранится в явном виде в памяти.&lt;br /&gt;&lt;br /&gt;Но ради интереса можно подумать что представляет собой класс на низком уровне.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;class A{&lt;br /&gt;int x;&lt;br /&gt;int f(){return 1};&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt; &lt;br /&gt;Если класс не используется в программе, то компилятор, скорее всего пропустит это объявление. Но допустим мы создали объект: &lt;span style="font-weight:bold;"&gt;A a&lt;/span&gt;; но где лежит информация, что член x имеет тип int, и занимает 4 (на других платформах может и &lt;a href="http://ffil.blogspot.com/2009/09/blog-post_10.html"&gt;не 4&lt;/a&gt;) байта? В исходном коде. Именно оттуда компилятор берет эту информацию и генерирует соответствующий код.&lt;br /&gt;А вот код функции f() действительно загружается в память. Она скорее всего будет иметь &lt;a href="http://ffil.blogspot.com/2009/10/blog-post.html"&gt;свой адрес&lt;/a&gt;. А может и не будет, например, если компилятор или автор решит сделать ее встроенной (inline).&lt;br /&gt;Как видим, в явном виде класс не хранится.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-2910522488994519482?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/2910522488994519482/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/09/3.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2910522488994519482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2910522488994519482'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/09/3.html' title='3. Разрешается ли объявлять указатель на объект? А указатель на класс?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-4548602832962537664</id><published>2010-09-30T23:46:00.000+04:00</published><updated>2010-09-30T23:46:00.165+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>2. Можно ли объявлять массив объектов? А массив классов?</title><content type='html'>С массивом объектов все ясно:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  class A {&lt;br /&gt;  public:&lt;br /&gt;    int x;&lt;br /&gt;  };&lt;br /&gt;&lt;br /&gt;  A a[3];&lt;br /&gt;  //либо динамически:&lt;br /&gt;  //A* a = new A[3];&lt;br /&gt;  //(важно не забыть delete[] a;)&lt;br /&gt;  a[0].x = 1;&lt;br /&gt;  a[1].x = 2;&lt;br /&gt;  a[2].x = 3;&lt;br /&gt;&lt;br /&gt;  std::cout &lt;&lt; a[0].x &lt;&lt; a[1].x &lt;&lt; a[2].x;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Переходим к следующему подвопросу. В Delphi можно было провернуть такую штуку:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;type&lt;br /&gt;&lt;br /&gt;A = class&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;A1 = class(A)&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;A2 = class(A)&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;classA = class of A;&lt;br /&gt;&lt;br /&gt;var&lt;br /&gt;  classArray : array[1..2] of classA;&lt;br /&gt;  objArray : array[1..2] of A;&lt;br /&gt;  i : Integer;&lt;br /&gt;&lt;br /&gt;begin&lt;br /&gt; classArray[1] := A1;&lt;br /&gt;  classArray[2] := A2;&lt;br /&gt;  for i := 1 to 2 do&lt;br /&gt;  begin&lt;br /&gt;    objArray[i] := classArray[i].Create();&lt;br /&gt;    ShowMessage(objArray[i].ClassName);&lt;br /&gt;  end;&lt;br /&gt;end;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;То есть действительно реализовать некий массив классов (можно ли его так назвать?). В C++ я был не очень уверен и погуглил "массив классов". Можно сделать похожий механизм через &lt;a href="http://www.rsdn.ru/forum/cpp/1200318.flat.aspx"&gt;порождающие фабрики&lt;/a&gt;. Но так как это не массив, в обычном понимании, и это только 2-й вопрос, то ответ - "нельзя".&lt;br /&gt;А еще поиск ответа показал, что очень многие спрашивают про "массив классов" имея в виду "массив объектов". Значит первый вопрос (чем обличается класс от объекта?) вполне актуален :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-4548602832962537664?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/4548602832962537664/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/09/2.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4548602832962537664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4548602832962537664'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/09/2.html' title='2. Можно ли объявлять массив объектов? А массив классов?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-1106094010494379197</id><published>2010-09-29T23:15:00.002+04:00</published><updated>2010-09-29T23:15:00.249+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='385'/><title type='text'>1. Что определяет класс? Чем отличается класс от объекта?</title><content type='html'>Класс определяет структуру и поведение. Объект определяет состояние (наполнение структуры) и меняет его в зависимости от поведения, заданным классом.&lt;br /&gt;Вопрос "Чем отличается класс от объекта?" задает экзаменатор студенту, когда пытается вытащить его на троечку. А студент даже не открывал первую страницу отксеренных лекций. Это примерно то же самое, что спрашивать: "А чем вот этот Тузик(см. рис.) отличается от биологического подвида "собака домашняя"?".&lt;br /&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;" src="http://3.bp.blogspot.com/_t8RIUyCEX8Q/TKJLV2-3dZI/AAAAAAAAAFE/GWcAFbTZotM/s320/bd4ee2fe7754.jpg" border="0" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-1106094010494379197?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/1106094010494379197/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/09/1.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1106094010494379197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1106094010494379197'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/09/1.html' title='1. Что определяет класс? Чем отличается класс от объекта?'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_t8RIUyCEX8Q/TKJLV2-3dZI/AAAAAAAAAFE/GWcAFbTZotM/s72-c/bd4ee2fe7754.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-2293867340407532654</id><published>2010-09-24T10:12:00.004+04:00</published><updated>2010-10-01T22:08:57.886+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='тест'/><title type='text'>Большой список вопросов на знание C++</title><content type='html'>&lt;a href="http://www.rsdn.ru/forum/cpp/1870577.1.aspx"&gt;http://www.rsdn.ru/forum/cpp/1870577.1.aspx&lt;/a&gt;&lt;br /&gt;Целых 385 вопросов. От простых до очень сложных.&lt;br /&gt;Буду отвечать понемногу, и помечать топики с ответами меткой "385"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-2293867340407532654?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/2293867340407532654/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/09/c.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2293867340407532654'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2293867340407532654'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/09/c.html' title='Большой список вопросов на знание C++'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-5295534528838826212</id><published>2010-08-08T23:06:00.000+04:00</published><updated>2010-08-08T23:06:00.068+04:00</updated><title type='text'>QT интернационализация.</title><content type='html'>Хорошие статьи о создании поддержки нескольких языков в приложении. &lt;br /&gt;1. &lt;a href="http://habrahabr.ru/blogs/qt_software/51319/"&gt;Qt — трудности перевода&lt;/a&gt;&lt;br /&gt;2. &lt;a href="http://habrahabr.ru/blogs/qt_software/51756/"&gt;Локализация и числительные&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-5295534528838826212?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/5295534528838826212/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/08/qt_08.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/5295534528838826212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/5295534528838826212'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/08/qt_08.html' title='QT интернационализация.'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-97052775470307837</id><published>2010-08-07T22:54:00.007+04:00</published><updated>2010-08-08T18:30:36.268+04:00</updated><title type='text'>QT. Цвета виджета.</title><content type='html'>&lt;pre class="cpp-qt" style="font-family:monospace;"&gt;&lt;span style="color: #22aadd;"&gt;QPalette&lt;/span&gt; p &lt;span style="color: #006E28;"&gt;=&lt;/span&gt; MyLabel&lt;span style="color: #006E28;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #2B74C7;"&gt;palette&lt;/span&gt;&lt;span style="color: #006E28;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #006E28;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #006E28;"&gt;;&lt;/span&gt;&lt;br /&gt;p.&lt;span style="color: #2B74C7;"&gt;setColor&lt;/span&gt;&lt;span style="color: #006E28;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #22aadd;"&gt;QPalette&lt;/span&gt;&lt;span style="color: #006E28;"&gt;::&lt;/span&gt;&lt;span style="color: #2B74C7;"&gt;Window&lt;/span&gt;&lt;span style="color: #006E28;"&gt;,&lt;/span&gt; Qt&lt;span style="color: #006E28;"&gt;::&lt;/span&gt;&lt;span style="color: #2B74C7;"&gt;black&lt;/span&gt;&lt;span style="color: #006E28;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #006E28;"&gt;;&lt;/span&gt; &lt;span style="color: #888888;"&gt;//фон&lt;/span&gt;&lt;br /&gt;p.&lt;span style="color: #2B74C7;"&gt;setColor&lt;/span&gt;&lt;span style="color: #006E28;"&gt;&amp;#40;&lt;/span&gt;&lt;span style="color: #22aadd;"&gt;QPalette&lt;/span&gt;&lt;span style="color: #006E28;"&gt;::&lt;/span&gt;&lt;span style="color: #2B74C7;"&gt;WindowText&lt;/span&gt;&lt;span style="color: #006E28;"&gt;,&lt;/span&gt; Qt&lt;span style="color: #006E28;"&gt;::&lt;/span&gt;&lt;span style="color: #2B74C7;"&gt;red&lt;/span&gt;&lt;span style="color: #006E28;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #006E28;"&gt;;&lt;/span&gt; &lt;span style="color: #888888;"&gt;//шрифт&lt;/span&gt;&lt;br /&gt;MyLabel&lt;span style="color: #006E28;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #2B74C7;"&gt;setWidget&lt;/span&gt;&lt;span style="color: #006E28;"&gt;&amp;#40;&lt;/span&gt;p&lt;span style="color: #006E28;"&gt;&amp;#41;&lt;/span&gt;&lt;span style="color: #006E28;"&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;все.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-97052775470307837?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/97052775470307837/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/08/qt.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/97052775470307837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/97052775470307837'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/08/qt.html' title='QT. Цвета виджета.'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-755128057130572600</id><published>2010-08-06T22:10:00.002+04:00</published><updated>2010-08-07T18:27:35.631+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QT'/><category scheme='http://www.blogger.com/atom/ns#' term='QObject'/><category scheme='http://www.blogger.com/atom/ns#' term='Q_OBJECT'/><title type='text'>QT. QObject. Первые ошибки. Collect2: ld returned 1 exit status.</title><content type='html'>В связи со срочностью написания приложения на QT, была бегло пролистана соответствующая книжка. За эту спешку поплатился кучей глупых ошибок. Решил собрать коллекцию таких, на которые MinGW невразумительно ругается :)&lt;br /&gt;&lt;br /&gt;При работе с QObject, очень просто получить такое:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. no matching function for call to 'QObject::connect(...)'&lt;br /&gt;2. undefined reference to 'vtable for MyClass'&lt;br /&gt;3. collect2: ld returned 1 exit status&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Последняя ошибка на первом месте моего хит-парада неприятных ошибок :)&lt;br /&gt;&lt;br /&gt;Итак, если мы хотим использовать объект QObject, нужно не забывать:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt; Определять классы, использующие макрос Q_OBJECT в заголовочном файле (а не cpp). Иначе схлопочем ошибки 1 и 3.&lt;br /&gt;&lt;li&gt; Вставлять макроса Q_OBJECT (Ошибка 1). Примечание: если собрать проект без этого макроса, потом вставить его и опять попробовать собрать, то можно получить ошибки 2 и 3. Нужно произвести чистку проекта (или тупо грохнуть папку с билдом. В QT Creator она по умолчанию-MyProject-build-desktop)&lt;br /&gt;&lt;li&gt; Наследоваться от QObject, или его производного класса (Ошибка 1).&lt;br /&gt;&lt;li&gt; Вставлять #include &lt;QObject&gt;. Ошибки можно и не получить, но сигналы и слоты работать не будут.&lt;br /&gt;&lt;li&gt; Определять объявленные слоты, если не хотим получить ошибку 3. С этим я конкретно намучался. "collect2: ld returned 1 exit status" и все! Ну как тут понять, что я просто забыл написать тело для слота MyClass::mySlot(){/* */} &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPD (7.08.10 18:25):&lt;/b&gt;&lt;br /&gt;Блин, мне было нужно смотреть консоль сборки (QT Creator). Я бы сразу увидел дополнительную информацию о причинах ошибки.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-755128057130572600?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/755128057130572600/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/08/qt-qobject-collect-2-ld-returned-1-exit.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/755128057130572600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/755128057130572600'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/08/qt-qobject-collect-2-ld-returned-1-exit.html' title='QT. QObject. Первые ошибки. Collect2: ld returned 1 exit status.'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-4674589668082338780</id><published>2010-07-07T21:46:00.002+04:00</published><updated>2010-07-07T22:29:26.400+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><category scheme='http://www.blogger.com/atom/ns#' term='Quizful'/><title type='text'>Еще 2 теста на Quizful</title><content type='html'>Я просто был обязан их пройти :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.quizful.net/test/pascal_basics"&gt;Pascal - Основы&lt;/a&gt;:&lt;br /&gt;Правильных ответов: 13 / 16 (81 %) требуется: 12&lt;br /&gt;Синтаксис 3 / 4 (75 %)&lt;br /&gt;Управляющие конструкции 3 / 4 (75 %)&lt;br /&gt;Процедуры и функции 2 / 3 (66 %)&lt;br /&gt;Указатели и ссылки 1 / 1 (100 %)&lt;br /&gt;Типы данных 4 / 4 (100 %)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.quizful.net/test/delphi_basics"&gt;Delphi 7 - Основы&lt;/a&gt;&lt;br /&gt;Правильных ответов: 14 / 18 (77 %) требуется: 14&lt;br /&gt;Синтаксис 4 / 4 (100 %)&lt;br /&gt;Ход выполнения программы 2 / 3 (66 %)&lt;br /&gt;Указатели и ссылки 2 / 3 (66 %)&lt;br /&gt;Массивы 2 / 3 (66 %)&lt;br /&gt;Классы и объекты 3 / 4 (75 %)&lt;br /&gt;Остальные 1 / 1 (100 %)&lt;br /&gt;&lt;br /&gt;Радует, что провалов нет.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-4674589668082338780?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/4674589668082338780/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/07/2-quizful.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4674589668082338780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4674589668082338780'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/07/2-quizful.html' title='Еще 2 теста на Quizful'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-4639820351433942400</id><published>2010-07-05T23:07:00.000+04:00</published><updated>2010-07-05T23:07:10.884+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Страуструп'/><title type='text'>"Это же БИБЛИЯ))) Не продам..."</title><content type='html'>Таким был один из комментариев в местном сообществе, на мое предложение купить бумажную книгу Страуструпа :) Ее нигде нет. В Ozon'е, Books.ru, Bolero и в куче других нет. В электронном виде не интересно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-4639820351433942400?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/4639820351433942400/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/07/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4639820351433942400'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4639820351433942400'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/07/blog-post.html' title='&quot;Это же БИБЛИЯ))) Не продам...&quot;'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-9079920069151768198</id><published>2010-07-04T23:16:00.000+04:00</published><updated>2010-07-04T23:17:37.351+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='Quizful'/><title type='text'>Сервис онлайн тестирования Quizful</title><content type='html'>Про этот сервис я знал уже давно, если не ошибаюсь, прочитал про него на Хабре. После прочтения заглянул на него, ради интереса прошел какой-то тест. И только потому, что саморазвиваться мне не очень хотелось, я долго не возвращался туда. Но когда захотел проверить свои знания c++, сразу же вспомнил о нем. Итак, описание с сайта &lt;a href="http://Quizful.net"&gt;Quizful.net&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Проект Quizful предназначен для онлайн-тестирования специалистов в сфере информационных технологий. Quizful является community-driven сервисом и развивается во многом благодаря усилиям сообщества ИТ-специалистов.&lt;br /&gt;&lt;br /&gt;Цель проекта - предоставить качественный бесплатный сервис, который бы не только проверял уровень имеющихся знаний, но и помогал в получении новых знаний.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;То, что нужно. Сразу был выбран тест &lt;a href="http://www.quizful.net/test/cpp_basic"&gt;"C++ - Основы"&lt;/a&gt;. И вот горькая правда: тест не пройден.&lt;br /&gt;&lt;br /&gt;Правильных ответов: 11 / 20 (55 %) требуется: 15&lt;br /&gt;Базовые понятия 2 / 5 (40 %)&lt;br /&gt;Управляющие конструкции 3 / 3 (100 %)&lt;br /&gt;Функции 2 / 3 (66 %)&lt;br /&gt;Ссылки и указатели 3 / 3 (100 %)&lt;br /&gt;Структуры и классы 0 / 4 (0 %)&lt;br /&gt;Массивы 1 / 2 (50 %)&lt;br /&gt;&lt;br /&gt;Я конечно очень расстроился, но комменты приободрили:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Отличный тест на знание C++! Я его 2 раза завалил - прошел только с 3-ей попытки, хотя программирую на нем уже 8 лет! После теста возникает непреодолимое желание схватить книгу Страуструпа и читать до посинения! Жаль что времени на это у меня нет и не предвидится :( А так Автору теста - 5!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;До прохождения теста считал себя если не крутым, то неплохим знатоком С++, благо кодирую на нем уже года три, есть несколько завершенных проектов... но тест оказался "ушатом холодной воды" выявил кучу моих пробелов в теории - пройти его сумел только с 4го раза. Почувствовал себя невеждой. Срочно открыл книги Кернигана, Страуструпа и Майерса - сидеть мне с ними по вечерам месяц, пока не пройду без ошибок все тесты.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Значит все не так уж плохо. И не зря я долбил указатели, 3/3 - порадовало :)&lt;br /&gt;&lt;br /&gt;Обычно я не люблю тесты за их требования знать половину справочника, то, что я за полторы секунды найду в гугле. Тут же, видимо благодаря сообществу, вопросы в целом понравились. То, с чем мы сталкиваемся на практике.&lt;br /&gt;&lt;br /&gt;Например: &lt;span style="font-style:italic;"&gt;Что будет выведено на экран после выполнение данного фрагмента кода? &lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;int x = 0; &lt;br /&gt;int y = 0; &lt;br /&gt; &lt;br /&gt;if (x++ &amp;&amp; y++){ &lt;br /&gt;y += 2; &lt;br /&gt;} &lt;br /&gt;   &lt;br /&gt;cout &lt;&lt; x + y; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Не буду писать (но очень хочется, так как из-за этого я ответил неверно), что есть подвох - в программировании все строго. &lt;br /&gt;&lt;br /&gt;Варианты ответа:&lt;br /&gt;0 (84 / 368)&lt;br /&gt;1 (77 / 368)&lt;br /&gt;2 (103 / 368)&lt;br /&gt;3 (12 / 368)&lt;br /&gt;4 (91 / 368)&lt;br /&gt;В скобках количество давших такой ответ и это самое любопытное :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-9079920069151768198?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/9079920069151768198/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/07/quizful.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/9079920069151768198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/9079920069151768198'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/07/quizful.html' title='Сервис онлайн тестирования Quizful'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-2318548943917068376</id><published>2010-01-01T20:35:00.001+03:00</published><updated>2010-01-02T22:39:38.649+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='планы'/><title type='text'>Планы</title><content type='html'>Первый день нового года - отличный повод строить планы.&lt;br /&gt;&lt;br /&gt;Для работы:&lt;br /&gt;· В первую очередь (в первых месяцах), хотелось бы занятся изучением процесса разработки ПО.&lt;br /&gt;· Администрирование Windows Server&lt;br /&gt;· Нужно более хорошее знание Oracle, pl/sql. &lt;br /&gt;· Основы информационной безопасности.&lt;br /&gt;&lt;br /&gt;Для себя&lt;br /&gt;· Основы Linux&lt;br /&gt;· Основы Adobe Flash (просто интересно)&lt;br /&gt;&lt;br /&gt;В конце года можно будет подвести итоги :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-2318548943917068376?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/2318548943917068376/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2010/01/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2318548943917068376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2318548943917068376'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2010/01/blog-post.html' title='Планы'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-6364809153885253005</id><published>2009-10-01T21:21:00.002+04:00</published><updated>2009-10-02T13:05:53.516+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='функции'/><title type='text'>Функция без явного определения</title><content type='html'>Убойный для меня пример.&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&lt;font color="#0000ff"&gt;typedef int&lt;/font&gt; (*pf)(&lt;font color="#0000ff"&gt;int&lt;/font&gt;, &lt;font color="#0000ff"&gt;int&lt;/font&gt;);&lt;br /&gt;&lt;font color="#0000ff"&gt;char&lt;/font&gt; c[] = {85,-119,-27,-117,69,12,3,69,8,93,-61,-112};&lt;br /&gt;pf sum = (pf)c; &lt;font color="#008000"&gt;//reinterpret_cast отказывается, поэтому так.&lt;/font&gt;&lt;br /&gt;cout &amp;#60;&amp;#60; sum(2,3); &lt;font color="#008000"&gt;//Вывод 5.&lt;/font&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font size="1" color="gray"&gt;* This source code was highlighted with &lt;a href="http://virtser.net/blog/post/source-code-highlighter.aspx"&gt;&lt;font size="1" color="gray"&gt;Source Code Highlighter&lt;/font&gt;&lt;/a&gt;.&lt;/font&gt;&lt;/code&gt;&lt;/blockquote&gt;Теперь sum - функция сложения, являющаяся аналогом этой:&lt;br /&gt;&lt;code&gt;int sum(int a, int b){return a+b;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Сначала я написал нормальную функцию sum, затем байт за байтом просмотрел ее содержимое в памяти. К сожалению sizeof к функциям неприменим, поэтому я, после sum, определил еще одну функцию, и предположил, что в памяти они тоже рядом. Их адреса различались на 12 байт.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPD:&lt;/b&gt; Одной строкой:&lt;br /&gt;&lt;code&gt;cout &lt;&lt; ((int (*)(int, int))"\x55\x89\xE5\x8B\x45\x0C\x03\x45\x08\x5D\xC3\x90")(2,3);&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-6364809153885253005?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/6364809153885253005/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2009/10/blog-post_01.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6364809153885253005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6364809153885253005'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2009/10/blog-post_01.html' title='Функция без явного определения'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-4029544677353584798</id><published>2009-10-01T21:20:00.002+04:00</published><updated>2010-09-30T17:06:59.688+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='функции'/><title type='text'>Функции</title><content type='html'>Страуструп говорит, что с функцией можно сделать только две вещи, это вызвать ее и получить ее адрес. Я добавлю, для ясности, что этот адрес можно присвоить указателю на функцию и вызвать функцию с помощью этого указателя. Эти указатели не представляют собой что-то новое, они хранят адрес функции.&lt;br /&gt;&lt;br /&gt;Повторюсь, что я веду этот блог не как учебное пособие, а пытаюсь объяснить самому себе сложные моменты (написание топика заставляет достаточно подробно вникнуть в суть), а так же необычные вещи удивившие меня. Еще я люблю очень маленькие(особенно в одну строчку :), но показательные примеры.&lt;br /&gt;&lt;br /&gt;Вопрос которым я задался: можно ли вызвать функцию, имея только ее адрес хранящийся в long. Разумеется просто ради интереса, без практической пользы. Без reinterpret_cast обойтись явно не смогу. Еще понадобится тип функции.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;font size="2" face="Courier New" color="black"&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;char&lt;/font&gt; f&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008000"&gt;{&lt;/font&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt; &lt;font color="#FF0000"&gt;'f'&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt;&lt;font color="#008000"&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;typedef&lt;/font&gt; &lt;font color="#0000ff"&gt;char&lt;/font&gt; &lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#000040"&gt;*&lt;/font&gt;PF&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt; &lt;font color="#666666"&gt;//именно такой тип у f()&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;long&lt;/font&gt; a &lt;font color="#000080"&gt;=&lt;/font&gt; &lt;font color="#0000ff"&gt;reinterpret_cast&lt;/font&gt;&lt;font color="#000080"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;long&lt;/font&gt;&lt;font color="#000080"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#008000"&gt;(&lt;/font&gt;f&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt; &lt;font color="#666666"&gt;//получаем число...&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000dd"&gt;cout&lt;/font&gt; &lt;font color="#000080"&gt;&amp;lt;&amp;lt;&lt;/font&gt; &lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#0000ff"&gt;reinterpret_cast&lt;/font&gt;&lt;font color="#000080"&gt;&amp;lt;&lt;/font&gt;PF&lt;font color="#000080"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#008000"&gt;(&lt;/font&gt;a&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008000"&gt;(&lt;/font&gt;&lt;font color="#008000"&gt;)&lt;/font&gt;&lt;font color="#008080"&gt;;&lt;/font&gt; &lt;font color="#666666"&gt;//... говорим, что это число - указатель на функцию. Скобки () приводят вызову функции.&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&lt;/font&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-4029544677353584798?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/4029544677353584798/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2009/10/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4029544677353584798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4029544677353584798'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2009/10/blog-post.html' title='Функции'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-4603298774555129893</id><published>2009-09-26T20:16:00.002+04:00</published><updated>2009-09-26T20:21:55.152+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='const'/><title type='text'>Константы</title><content type='html'>У Эккеля не зря целая глава выделена под константы. В этой теме много интересного. Сейчас я хочу создать константу и подкопаться к ней через указатели.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;const int a = 1;&lt;br /&gt;int b;&lt;br /&gt;cout &lt;&lt; &amp;a &lt;&lt; &amp;b; //У меня, при запусках, b всегда имеет адрес меньше(на 4 байта), чем a.&lt;br /&gt;int* p = (&amp;b+1); //Это адрес константы a&lt;br /&gt;cout &lt;&lt; *p //1&lt;br /&gt;*p = 2; //Меняем&lt;br /&gt;cout &lt;&lt; a &lt;&lt; endl &lt;&lt; *p; //1 2&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Вроде поменяли, однако a осталось прежним, но по ее адресу лежит число 2. Дело в том, что компилятор просто заменяет все вхождения a на 1, и обычно для этого не выделяет память. Но когда мы написали &amp;a, компилятор все-таки выделил память для нее и записал туда значение. Но все-равно перед компиляцией заменил в коде a на 1. Память вроде бы пропадает впустую, ее даже можно изменить.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-4603298774555129893?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/4603298774555129893/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_26.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4603298774555129893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4603298774555129893'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_26.html' title='Константы'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-3336552425978221623</id><published>2009-09-21T23:49:00.007+04:00</published><updated>2011-02-11T14:35:48.205+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='reinterpret_cast'/><title type='text'>reinterpret_cast</title><content type='html'>Мне нравится, когда в книге, сначала приводится пример программы с комментарием типа: «Ну что, видали как круто? Подбирайте челюсть со стола и читайте дальше, как это работает». Обожаю если примеры маленькие, например:&lt;br /&gt;&lt;pre&gt;&lt;code&gt;long a = 2829155;&lt;br /&gt;cout &lt;&lt; reinterpret_cast&lt; char* &gt;(&amp;a);&lt;/code&gt;&lt;/pre&gt;Выведется строка «c++». Не отдам руку на отсечение, что у всех она будет именно такой, это требует дополнительного исследования.&lt;br /&gt;В первой строке записали четырехбайтовое число. Затем взяли адрес переменной и нагло наврали компилятору, что этот адрес совсем не указатель на long. Это указатель на char. Как компилятор интерпретирует указатель на char? Как строку. &lt;br /&gt;&lt;i&gt;Почему именно «с++»? 2829155 == 0x002B2B63. То есть число  2829155 хранится в виде последовательности байт: 0x63(==99), 0x2B(==43), 0x2B(==43), 0x0(==0). Если посмотреть таблицу символов, то убедимся, что 99 это символ «c», а 43 – «+». Байт с нулем интерпретируется как конец строки.&lt;br /&gt;Совсем нетрудно написать программу обратного преобразования, из строки в число&lt;/i&gt;&lt;br /&gt;Я не смогу толково объяснить все тонкости reinterpret_cast, для этого есть учебники. Однако, точно могу сказать, что он запросто превращает указатель одного типа в указатель другого. А это влечет совершенно другую интерпретацию байтов памяти, в чем можно убедиться выше. Об опасностях нетрудно догадаться. Если в примере взять число побольше, то 4-й байт уже не будет равен нулю. Значит, приведенная к char* строка будет продолжаться до первого нуля, но уже неизвестно где он будет. &lt;br /&gt;С классами тоже интересно.&lt;br /&gt;&lt;pre&gt;&lt;code&gt;class A {&lt;br /&gt;  public:&lt;br /&gt;  int i;&lt;br /&gt;};&lt;br /&gt;void main(){&lt;br /&gt;  int b = 1;&lt;br /&gt;  cout &lt;&lt; (*reinterpret_cast&lt; A* &gt;(&amp;b)).i; /*1*/&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;Тут говорится, что по адресу &amp;b вовсе не число, а переменная класса A. Нужно ли говорить насколько это все опасно.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-3336552425978221623?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/3336552425978221623/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2009/09/reinterpretcast.html#comment-form' title='Комментарии: 3'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/3336552425978221623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/3336552425978221623'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2009/09/reinterpretcast.html' title='reinterpret_cast'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-5211526432207436756</id><published>2009-09-18T14:00:00.003+04:00</published><updated>2009-09-18T15:33:26.329+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='массивы'/><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><title type='text'>Массивы</title><content type='html'>В C++ очень многие понятия связаны с указателями. Не знаю нравится мне это или очень нравится, но я все чаще говорю "ух ты, прикольно!". Если написать в Паскале&lt;br /&gt;&lt;br /&gt;&lt;b&gt;var z : array[1..3] of Integer;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;то переменная z будет массивом и все тут. Словно обертка над более низкоуровневыми типами. Хотя, может быть, это не совсем верно. Массив в C++:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;int z[3];&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;В памяти отводится место(непрерывное) для трех int, а переменная z - указатель на первый элемент. &lt;b&gt;Квадратные скобки просто делают удобнее работу с указателями&lt;/b&gt;. А раз так, то для получения значения, можно писать не только &lt;b&gt;z[i]&lt;/b&gt;, а еще и &lt;b&gt;*(z+i)&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;z[i] == *(z+i)&lt;br /&gt;&amp;z[i] == z+i&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Иными словами: Берем адрес первого элемента массива (адрес это z). Следующий элемент находится на sizeof(int) байт (у меня 4) дальше. Но количество байт нам знать не нужно, так как компилятор в курсе, что z - указатель на int, поэтому z+1 указывает на sizeof(int) дальше чем z, т.е на следующий элемент массива (на z[1]). Аналогично и z+i.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Еще пример&lt;br /&gt;int* p = z+1;&lt;br /&gt;int* p = &amp;z[1];&lt;br /&gt;//Обе записи эквивалентны.&lt;br /&gt;cout &lt;&lt; p[2]; //p - не массив, просто квадратные скобки смещают указатель и сразу разыменовывают.&lt;br /&gt;&lt;br /&gt;В этом примере p[1]==z[2].&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-5211526432207436756?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/5211526432207436756/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_18.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/5211526432207436756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/5211526432207436756'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_18.html' title='Массивы'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-7323782467813995846</id><published>2009-09-17T17:20:00.001+04:00</published><updated>2009-09-17T17:26:31.790+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='строковые литералы'/><title type='text'></title><content type='html'>Каждая строка занимает память. Операция определения адреса применима не только к переменным. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;cout &lt;&lt; (long)&amp;amp;"Hello" &lt;&lt; (long)&amp;amp;"World";&lt;/b&gt; //4464640 4464646 (опять эти числа, почему всегда они) &lt;br /&gt;&lt;br /&gt;Любопытно, если записать одинаковые слова:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;cout &lt;&lt; (long)&amp;amp;"Hello" &lt;&lt; (long)&amp;amp;"Hello";&lt;/b&gt; //4464640 4464640&lt;br /&gt;&lt;br /&gt;то можно увидеть одинаковые адреса. Видимо компилятор произвел оптимизацию.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-7323782467813995846?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/7323782467813995846/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_17.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7323782467813995846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/7323782467813995846'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_17.html' title=''/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-2401909488990203023</id><published>2009-09-14T23:28:00.005+04:00</published><updated>2009-09-14T23:56:25.575+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='char'/><category scheme='http://www.blogger.com/atom/ns#' term='указатели'/><title type='text'>char* и строковые литералы</title><content type='html'>&lt;div&gt;Изучаю дальше.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;char c = 'x';&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;char* pc = &amp;c;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Все понятно, pc – указатель на переменную char. И тут внезапно! Оказывается можно так:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;char* pc = ”Hello”;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;cout &amp;lt;&amp;lt; pc &lt;/b&gt;//Hello;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;pc же вроде должна хранить адрес! Страуструп сказал, что так можно типа потому, что в языке C строковые литералы (это оказывается так по-научному называется) хранились именно так, через char*. А C++ должен поддерживать C. И Страуструпу тут все понятно и незачем останавливаться на этом подробно. Жаль я не он, и мне ничего не понятно. Мне не нравится, что char* ведет двойную жизнь. Сейчас будем разбираться.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Попробую посмотреть адрес, и разыменовать pc.&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;/b&gt;&lt;div&gt;&lt;b&gt;cout &amp;lt;&amp;lt; pc &amp;lt;&amp;lt; (long)pc &amp;lt;&amp;lt; *pc;&lt;/b&gt; //Hello 4464640 H&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ага, pc выдает Hello, а когда я преобразовал ее к long, то она все-таки вернула адрес.&lt;/div&gt;&lt;div&gt;Отлично, *pc выдает символ H. Т.е. pc по-прежнему работает как указатель на char.&lt;/div&gt;&lt;div&gt;Интересно, где остальные символы слова.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Итак, я взял pc (а он все-таки хранит адрес, но при удобной возможности прикидывается строкой), прибавил к хранящемуся (слово было выговорено с только нескольких попыток) там адресу 1. В ячейке с адресом pc лежит ‘H’, очевидно предположить, что в следующей ячейке лежит 'e'. Чтобы узнать адрес следующей ячейки, нужно просто прибавить 1 (так как ячейка char равна байту). А чтобы извлечь ее значение, нужно сделать разыменование:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;cout &amp;lt;&amp;lt; *pc &amp;lt;&amp;lt; *(pc+1) &amp;lt;&amp;lt; *(pc+2) &amp;lt;&amp;lt; *(pc+3) &amp;lt;&amp;lt; *(pc+4);&lt;/b&gt; //Hello&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Сейчас нарисую, память после:&lt;/div&gt;&lt;div&gt;&lt;b&gt;char* pc = ”Hello”;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;char* pc2 = ”World”;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;img src="http://lh6.ggpht.com/_t8RIUyCEX8Q/Sq6Z7B1DNSI/AAAAAAAAACo/kzQUpU8QJTU/pointers_char.gif" /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Так получилось, что слова идут друг за другом. В следующий раз такого может не быть. Для этого случая верно выражение pc + 6 == pc2. Еще можно вытащить слово “World” не используя pc2&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;cout &amp;lt;&amp;lt; *(pc+6) &amp;lt;&amp;lt; *(pc+7) &amp;lt;&amp;lt; *(pc+8) &amp;lt;&amp;lt; *(pc+9) &amp;lt;&amp;lt; *(pc+10);&lt;/b&gt; //World&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Разумеется, в другой раз это может не прокатить.&lt;/div&gt;&lt;div&gt;Определить конец слова помогает ‘\0’. Если бы я был составителем задачника, то добавил задачу печати слова, используя *(pc+i) в цикле, пока не встретится ‘\0’.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;А еще минздрав предупреждает: строковые литералы изменять нельзя. *(pc) = 'z'; вывалится с ошибкой во время выполнения.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Вообще говоря это устаревший способ, лучше использовать char c[] = “Hello”. Потом об этом напишу.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-2401909488990203023?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/2401909488990203023/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_14.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2401909488990203023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/2401909488990203023'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_14.html' title='char* и строковые литералы'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_t8RIUyCEX8Q/Sq6Z7B1DNSI/AAAAAAAAACo/kzQUpU8QJTU/s72-c/pointers_char.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-1754583725731173295</id><published>2009-09-13T20:20:00.005+04:00</published><updated>2009-09-13T21:34:37.813+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='указатели'/><title type='text'>Указатели</title><content type='html'>В двух словах. &lt;p&gt;&lt;strong&gt;int i = 7;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;int* pi = &amp;i;&lt;/strong&gt; //Указатель на int. Проинициализирован адресом i.&lt;br /&gt;&lt;strong&gt;int** ppi = &amp;amp;pi&lt;/strong&gt; //Указатель на int*, т.е. указатель на указатель на int. Проинициализирован адресом pi.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Когда-то я не понимал, что физически, указатель - это переменная хранящая адрес. Вот и все. Взглянем на структуру памяти после выполнения вышеприведенного кода.&lt;br /&gt;&lt;/p&gt;&lt;p&gt; &lt;span class="Apple-style-span"   style="border-collapse: separate; color: rgb(0, 0, 0);   font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-family:'Times New Roman';font-size:16px;"&gt;&lt;span class="Apple-style-span"   style="border-collapse: collapse; color: rgb(102, 102, 102);   white-space: pre; font-family:Arial;font-size:11px;"&gt;&lt;img src="http://lh3.ggpht.com/_t8RIUyCEX8Q/Sq0fcS6geMI/AAAAAAAAABA/xES90okQdp4/pointers.gif" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span class="Apple-style-span"   style="border-collapse: separate; color: rgb(0, 0, 0);   font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-family:'Times New Roman';font-size:16px;"&gt;&lt;span class="Apple-style-span"   style="border-collapse: collapse; color: rgb(102, 102, 102);   white-space: pre; font-family:Arial;font-size:11px;"&gt;&lt;/span&gt;&lt;/span&gt;Прямоугольники символизируют ячейки памяти. Правее указаны их адреса. Разумеется адреса могут быть другими, при следующем запуске. Стрелки добавлены исключильно для наглядности. &lt;span class="Apple-style-span"   style="border-collapse: separate; color: rgb(0, 0, 0);   font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-family:'Times New Roman';font-size:16px;"&gt;&lt;span class="Apple-style-span"   style="border-collapse: collapse; color: rgb(102, 102, 102);   white-space: pre; font-family:Arial;font-size:11px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Переменная i может хранить любое значение типа int. pi - адрес любой переменной int. ppi - адрес любой переменной типа int*(например адрес pi).&lt;/p&gt;&lt;p&gt;Все это легко проверяется. В моем примере:&lt;/p&gt;&lt;p&gt;cout &lt;&lt; i &lt;&lt; (long)&amp;amp;i; //7 2293572&lt;br /&gt;cout &lt;&lt; pi &lt;&lt; (long)&amp;amp;pi; //2293572 2293568&lt;br /&gt;cout &lt;&lt; ppi &lt;&lt; (long)&amp;ppi; //22968 2293564&lt;br /&gt;cout &lt;&lt; *pi &lt;&lt; **ppi &lt;&lt; (long)*ppi; //7 7 2293572&lt;br /&gt;&lt;/p&gt;&lt;p&gt;(long) - преобразование перед выводом. Без него адреса выводятся в шеснадцатеричном виде. * - операция разыменования. То есть *pi возвращает значение переменной, находящуюся по адресу pi. &lt;strong&gt;*ppi == pi == &amp;amp;i&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Был еще сложный для меня момент: указатели на int и на int* (и вообще все указатели) так похожи, раз хранят только адрес. Почему же нельзя сделать просто указатель на переменную любого типа. Вообще говоря можно. Но в таком случае можно легко ошибиться. Например случайно указать на переменную int, и думать про себя, что это объект. А благодаря типизации, компилятор будет следить за этим, а среда разработки будет помогать автозавершением кода для более сложных типов.&lt;/p&gt;&lt;p&gt;Уф, пока писал и проверял, сам все понял :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-1754583725731173295?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/1754583725731173295/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_6366.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1754583725731173295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/1754583725731173295'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_6366.html' title='Указатели'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/_t8RIUyCEX8Q/Sq0fcS6geMI/AAAAAAAAABA/xES90okQdp4/s72-c/pointers.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-6222919278827363088</id><published>2009-09-13T11:49:00.003+04:00</published><updated>2009-09-13T12:36:31.049+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='перечислимые типы'/><category scheme='http://www.blogger.com/atom/ns#' term='Страуструп'/><title type='text'>Перечислимые типы</title><content type='html'>&lt;p&gt;С этими типами посложнее, чем в Delphi. Самый простой пример:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;enum colors{RED, GREEN, BLUE};&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;RED, GREEN, BLUE - константы, равные числам 0, 1, 2 соответственно. Их значения можно задавать самостоятельно:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;enum colors{RED=0, GREEN=1, BLUE=9}; &lt;/strong&gt;//Должны быть целыми&lt;/p&gt;&lt;p&gt;Использование достаточно очевидно:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;colors x = GREEN; &lt;/strong&gt;//z == 1 &lt;br /&gt;&lt;strong&gt;colors z = 9; &lt;/strong&gt;//Ошибка компиляции.&lt;br /&gt;&lt;strong&gt;colors z = colors(9); &lt;/strong&gt;//А вот так все хорошо. z == BLUE&lt;strong&gt;&lt;br /&gt;if (z = BLUE) {/* */};&lt;/strong&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Любопытно (по крайней мере для меня), что переменной z можно присвоить другое  значение кроме этих трех:&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;colors z = 2; &lt;/strong&gt;//Как мы уже выяснили - это ошибка компиляции&lt;br /&gt;&lt;strong&gt;colors z = colors(2);&lt;/strong&gt; // Так можно. z == 2&lt;/p&gt;&lt;p&gt;Интересно, в каких пределах можно задавать значения? У меня не сошлось со Страуструпом.&lt;/p&gt;&lt;p&gt;&lt;em&gt;Он говорит, что выделяется непрерывный диапазон, в зависимости от минимального и максимального значения. Диапазон определяется минимальным количеством бит, требуемым для представления перечисления. Пример оттуда:&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;enum e2{a=3, b=9} //диапазон 0:15&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Поэтому, по его словам, e2 f2 = e2(20) не определено.&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;Границы диапазонов связаны со степенями двойки, но я не буду переписывать точное правило. Размер sizeof не может превышать sizeof(int).&lt;/em&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Не знаю почему, но как я не крутил, sizeof всегда был равен 4. По всей вероятности sizeof(enum) = sizeof(int).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Вывод, который я сделал: &lt;strong&gt;Перечислимый тип - это фактически тот же int, но с личными именами некоторых чисел&lt;/strong&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-6222919278827363088?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/6222919278827363088/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_13.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6222919278827363088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6222919278827363088'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_13.html' title='Перечислимые типы'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-8019049462160516231</id><published>2009-09-12T23:21:00.006+04:00</published><updated>2009-09-14T17:58:41.809+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='mingw'/><category scheme='http://www.blogger.com/atom/ns#' term='code::blocks'/><category scheme='http://www.blogger.com/atom/ns#' term='сапер'/><title type='text'>Консольный сапер</title><content type='html'>Чтобы практиковаться мне был нужен компилятор и среда разработки. Microsoft Visual Studio не устраивал платностью. Есть бесплатный Visual C++ Express Edition, но без MFC. Остановился на распространенном варианте Code::Blocks + MinGW.&lt;br /&gt;&lt;br /&gt;Для тренировки сделал сапера. Пишем столбец и строку, а в ответ получаем количество мин вокруг.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;code&gt;&lt;span style="font-family:Courier New;font-size:85%;color:black;"&gt;#include &lt;iostream&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include &lt;ctime&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; main() {&lt;br /&gt; &lt;span style="color:#0000ff;"&gt;const&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; SIZE = 3;&lt;br /&gt; &lt;span style="color:#0000ff;"&gt;const&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; ALL_MINES = 3;&lt;br /&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; m[SIZE+2][SIZE+2];&lt;br /&gt; &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; u[SIZE+2][SIZE+2];&lt;br /&gt;&lt;br /&gt; &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i=0; i&lt;=SIZE+1; i++){&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; j=0; j&lt;=SIZE+1; j++){&lt;br /&gt;   m[i][j] = &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;br /&gt;   u[i][j] = &lt;span style="color:#0000ff;"&gt;false&lt;/span&gt;;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; srand(time(0));&lt;br /&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; x, y;&lt;br /&gt; &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i=1; i&lt;=ALL_MINES; i++){&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;do&lt;/span&gt;{&lt;br /&gt;   x = rand() % SIZE + 1;&lt;br /&gt;   y = rand() % SIZE + 1;&lt;br /&gt;  }&lt;span style="color:#0000ff;"&gt;while&lt;/span&gt;(m[x][y]);&lt;br /&gt;  m[x][y] = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; xCount = SIZE * SIZE - ALL_MINES;&lt;br /&gt; &lt;span style="color:#0000ff;"&gt;while&lt;/span&gt;(xCount != 0){&lt;br /&gt;  std::cin &gt;&gt; x &gt;&gt; y;&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; xMines = 0;&lt;br /&gt;&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(m[y][x]){&lt;br /&gt;   std::cout &lt;&lt; &lt;span style="color:#A31515;"&gt;"fail"&lt;/span&gt; &lt;&lt; std::endl;&lt;br /&gt;   &lt;span style="color:#0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i=y-1; i&lt;=y+1; i++){&lt;br /&gt;   &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; j=x-1; j&lt;=x+1; j++){&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt;(m[i][j]){xMines++;}&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  std::cout &lt;&lt; xMines &lt;&lt; std::endl;&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (!u[y][x]){&lt;br /&gt;   xCount--;&lt;br /&gt;   u[y][x] = &lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (xCount = 0){std::cout &lt;&lt; &lt;span style="color:#A31515;"&gt;"win"&lt;/span&gt; &lt;&lt; std::endl;}&lt;br /&gt;&lt;br /&gt; &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; i=1; i&lt;=SIZE; i++){&lt;br /&gt;  &lt;span style="color:#0000ff;"&gt;for&lt;/span&gt;(&lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; j=1; j&lt;=SIZE; j++){&lt;br /&gt;   std::cout &lt;&lt; m[i][j];&lt;br /&gt;  }&lt;br /&gt;  std::cout &lt;&lt; std::endl;&lt;br /&gt; }&lt;br /&gt; &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; 0;&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;color:gray;"&gt;* This source code was highlighted with &lt;a href="http://virtser.net/blog/post/source-code-highlighter.aspx"&gt;&lt;span style="font-size:78%;color:gray;"&gt;Source Code Highlighter&lt;/span&gt;&lt;/a&gt;.&lt;/span&gt;&lt;/code&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Над кодом долго не думал :)&lt;br /&gt;&lt;br /&gt;&lt;img src="http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sqv92Mom67I/AAAAAAAAAA4/emnzM7JFpFw/s320/saper.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-8019049462160516231?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/8019049462160516231/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_12.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/8019049462160516231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/8019049462160516231'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_12.html' title='Консольный сапер'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sqv92Mom67I/AAAAAAAAAA4/emnzM7JFpFw/s72-c/saper.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-4014526269455374188</id><published>2009-09-10T23:15:00.001+04:00</published><updated>2009-09-10T23:22:10.864+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='типы'/><category scheme='http://www.blogger.com/atom/ns#' term='Страуструп'/><title type='text'>Страуструп. Размеры целочисленных типов.</title><content type='html'>&lt;p&gt;Я был в курсе, что книга для продолжающих. Во 2-й главе я занервничал. В 3-й начал паниковать. Эти главы с высоты птичьего полета охватывали процентов 70 из того, что я узнал из предыдущей книги. Что же будет дальше. Но все закончилось хэппи эндом, это был просто обзор возможностей языка :) &lt;/p&gt;&lt;p&gt;Наконец-то я понял в каких пределах могут отличаться фундаментальные типы в зависимосимости от платформы. Авторы любят предупреждать: "Внимание, размер типов может отличаться, обязательно это помните". А откуда я знаю какой размер может принять, скажем, тип int на другой платформе. 2 байта? 4?. А может, например 2 бита? Могу ли я быть уверен, что число 9000 влезет в int?&lt;/p&gt;&lt;p&gt;Но тут конкретно сказано: независимо от погоды типу char гарантируется 8 бит, для short - 16, long - 32. Хм, где же int. Cудя по sizeof(short) &lt;= sizeof(int) &lt;= sizeof(long) ему дадут 16 бит точно. У меня на 32-битной Висте и компилятором minGW для них выдало: 2, 4, 4. Ну да ладно, просто учту на будущее.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-4014526269455374188?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/4014526269455374188/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_10.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4014526269455374188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/4014526269455374188'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_10.html' title='Страуструп. Размеры целочисленных типов.'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-6236693982010406310</id><published>2009-09-09T23:50:00.000+04:00</published><updated>2009-09-10T12:11:08.573+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='Эккель'/><category scheme='http://www.blogger.com/atom/ns#' term='Страуструп'/><title type='text'>C++</title><content type='html'>&lt;p&gt;Так получилось, что я плохо знаю C++. Скажем так, чуть лучше уровня "Hello, World!". Если я хочу(а я хочу) писать прикладные программы, то просто обязан постигнуть его.&lt;/p&gt;&lt;p&gt;Это осознание пришло около 2-х недель назад. Я начал с поиска подходящей книги. В рунете первым делом вспоминают книгу Брюса Эккеля "Философия Java" (Thinking in Java). Вот и отлично, тем более она была куплена мною около полугода назад и аккуратно положена на полку. Я часто смотрел на ее красивую оранжевую обложку. Обложка мне нравилась. Вероятно потому, что оранжевый цвет считается самым антидепрессивным :) Иногда я прочитывал введение, через месяц забывал, и снова прочитывал. Начало введения было очень вдохновляющим, но к концу оно меня утомляло.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Но однажды я сел и стал читать. И за пару недель почти полностью ее прочитал. Мне понравилось, но новичку в программировании не рекомендую. Автор предполагает(и подчеркивает), что читатель знаком с языком C, и разъясняет только новое, появившееся в C++.&lt;/p&gt;&lt;p&gt;Честно говоря, мне приходилось читать ее очень медленно, вдаваясь в каждый пример, вдумываясь в каждое предложение. Понравилось, что почти нет "разжевывания" материала. Если не понимал, просто возвращался назад и врубался. &lt;/p&gt;&lt;p&gt;Стиль интересный, хочу перечитать. Но только после Страуструпа "Язык программирования С++", в котором я прочитал кучу введений и предисловий, а также главу "от редакции русского издания". Ходят легенды, что каждый программист должен ее прочитать.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-6236693982010406310?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/6236693982010406310/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2009/09/c.html#comment-form' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6236693982010406310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6236693982010406310'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2009/09/c.html' title='C++'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-877846433287681746</id><published>2009-09-08T22:50:00.000+04:00</published><updated>2009-09-10T12:11:53.509+04:00</updated><title type='text'></title><content type='html'>&lt;p&gt;Итак, надо вспомнить, что я вообще знаю.&lt;/p&gt;&lt;p&gt;Первым в списке QBasic - на нем написаны моя первая, а также вагон других программ. Интересно, что самым трудным для меня был цикл for, сложнее чем do-loop с массивами. Но я был тогда в 5-м классе. Не могу не вспомнить одну из самых крупных, созданную в 8 классе - тетрис с 29 различными фигурками (в каждой от одного до пяти квадратиков). Впрочем с возможностью выбора набора. &lt;/p&gt;&lt;p&gt;В университете начал учить Pascal. Долго не мог врубиться в указатели, а особенно в реализацию списков с помощью них. Хотя у меня тогда не было интернета.&lt;/p&gt;&lt;p&gt;Там же изучил HTML, CSS, но средненько. Очень поверхностно ASP, 1С, PHP&lt;/p&gt;&lt;p&gt;Курсовики и диплом писал на Delphi и достаточно хорошо усвоил принципы ООП. &lt;/p&gt;&lt;p&gt;Универ дал не очень много практики, зато теперь я относительно хорошо подкован в теории :)&lt;/p&gt;&lt;p&gt;На работе продолжил писать на Delphi, поэтому сам язык знаю достаточно хорошо. Но для меня остаются тайной дельфовые вкладки компонентов с названиями типа SOAP, Corba и т. п.&lt;/p&gt;&lt;p&gt;На среднем уровне владею SQL, PL/SQL&lt;/p&gt;&lt;p&gt;Не буду упоминать то, с чем мало работал.&lt;/p&gt;&lt;p&gt;Наверняка о чем-нибудь забыл написать.&lt;/p&gt;&lt;p&gt;Самая большая дыра в моем образовании это плохое знание C++. Про это в другом топике.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-877846433287681746?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/877846433287681746/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_07.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/877846433287681746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/877846433287681746'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post_07.html' title=''/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-640196201733819270.post-6647110859193647048</id><published>2009-09-08T22:00:00.000+04:00</published><updated>2009-09-10T12:12:31.866+04:00</updated><title type='text'>Начало не знаю чего</title><content type='html'>Читая ИТ- форумы, блоги, книги, статьи, слушая разговоры коллег, все чаще стал понимать, что ничего не понимаю. Завертелась мысль, что неплохо было бы изучить &lt;strike&gt;все&lt;/strike&gt; хотя бы поверхностно как можно больше популярных технологий, языков программирования, и всего остального, что связано с ИТ. Может быть я не представляю всей сложности, но по крайней мере есть большое желание. К тому же очень не хотелось бы отставать в своем развитии. Поэтому, для начала, завел блог в котором буду писать о своих &lt;strike&gt;трудностях, лени и т.п.&lt;/strike&gt; успехах :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/640196201733819270-6647110859193647048?l=ffil.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ffil.blogspot.com/feeds/6647110859193647048/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6647110859193647048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/640196201733819270/posts/default/6647110859193647048'/><link rel='alternate' type='text/html' href='http://ffil.blogspot.com/2009/09/blog-post.html' title='Начало не знаю чего'/><author><name>Fil</name><uri>http://www.blogger.com/profile/04210950860066296913</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_t8RIUyCEX8Q/Sn_T8KAK_xI/AAAAAAAAAAM/xKM8YcjamZo/S220/26425.jpeg'/></author><thr:total>2</thr:total></entry></feed>
