<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://mit.spbau.ru/sewiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9A%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BD%D0%B0+%D0%9A%D1%83%D1%80%D1%8C%D1%8F%D0%BD</id>
		<title>SEWiki - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://mit.spbau.ru/sewiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9A%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BD%D0%B0+%D0%9A%D1%83%D1%80%D1%8C%D1%8F%D0%BD"/>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/%D0%9A%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BD%D0%B0_%D0%9A%D1%83%D1%80%D1%8C%D1%8F%D0%BD"/>
		<updated>2026-05-07T20:08:15Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.26.2</generator>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BD%D0%B0_%D0%9A%D1%83%D1%80%D1%8C%D1%8F%D0%BD&amp;diff=400</id>
		<title>Участник:Кристина Курьян</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BD%D0%B0_%D0%9A%D1%83%D1%80%D1%8C%D1%8F%D0%BD&amp;diff=400"/>
				<updated>2011-09-20T20:20:33Z</updated>
		
		<summary type="html">&lt;p&gt;Кристина Курьян: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;kristina.kurian06@gmail.com&lt;br /&gt;
&lt;br /&gt;
Образование&lt;br /&gt;
&lt;br /&gt;
2010-наст.вр. Санкт-Петербургский академический университет РАН (магистратура)&lt;br /&gt;
&lt;br /&gt;
2006-2010 Санкт-Петербургский государственный политехнический университет, Физимо-механический Факультет, кафедра Прикладной математики (бакалавриат)&lt;/div&gt;</summary>
		<author><name>Кристина Курьян</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BD%D0%B0_%D0%9A%D1%83%D1%80%D1%8C%D1%8F%D0%BD&amp;diff=399</id>
		<title>Участник:Кристина Курьян</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:%D0%9A%D1%80%D0%B8%D1%81%D1%82%D0%B8%D0%BD%D0%B0_%D0%9A%D1%83%D1%80%D1%8C%D1%8F%D0%BD&amp;diff=399"/>
				<updated>2011-09-20T20:20:20Z</updated>
		
		<summary type="html">&lt;p&gt;Кристина Курьян: Новая страница: «kristina.kurian06@gmail.com Образование 2010-наст.вр. Санкт-Петербургский академический университет РАН…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;kristina.kurian06@gmail.com&lt;br /&gt;
Образование&lt;br /&gt;
2010-наст.вр. Санкт-Петербургский академический университет РАН (магистратура)&lt;br /&gt;
2006-2010 Санкт-Петербургский государственный политехнический университет, Физимо-механический Факультет, кафедра Прикладной математики (бакалавриат)&lt;/div&gt;</summary>
		<author><name>Кристина Курьян</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=2010&amp;diff=362</id>
		<title>2010</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=2010&amp;diff=362"/>
				<updated>2011-09-16T09:25:10Z</updated>
		
		<summary type="html">&lt;p&gt;Кристина Курьян: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ниже представлен список студентов группы SE набора 2010-го года (группа 506 в 2010-2011 уч.г. и 604 в 2011-2012 уч.г.)&lt;br /&gt;
&lt;br /&gt;
# [[Участник:Алиса Афонина|Афонина Алиса Дмитриевна]]&lt;br /&gt;
# [[Участник:Eabatalov89|Баталов Евгений Александрович]]&lt;br /&gt;
# [[Участник:Nerzhul|Бухонов Артем Павлович]]&lt;br /&gt;
# [[Участник:Alexey.Gurevich|Гуревич Алексей Александрович]]&lt;br /&gt;
# Исаев Валерий Иванович&lt;br /&gt;
# [[Участник:Aleksandr.kartashov|Карташов Александр Артурович]]&lt;br /&gt;
# [[Участник:Кристина Курьян|Курьян Кристина Петровна]]&lt;br /&gt;
# [[Участник:Svetlana Marchenko|Марченко Светлана Владимировна]]&lt;br /&gt;
# [[Участник:AM5800|Михайлов Александр Владимирович]]&lt;br /&gt;
# [[Участник:Katepol|Полищук Екатерина Геннадьевна]]&lt;br /&gt;
# [[Участник:Andrewprzh|Пржибельский Андрей Дмитриевич]]&lt;br /&gt;
# [[Участник:Sinay|Синай Павел Михайлович]]&lt;br /&gt;
# [[Участник:Artem.sokolov|Соколов Артем Андреевич]]&lt;br /&gt;
# [[Участник:Mariyafomkina|Фомкина Мария Сергеевна]]&lt;/div&gt;</summary>
		<author><name>Кристина Курьян</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D0%B8_%D0%BD%D0%B0_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=227</id>
		<title>Указатели на функции</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D0%B8_%D0%BD%D0%B0_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=227"/>
				<updated>2011-05-13T21:52:20Z</updated>
		
		<summary type="html">&lt;p&gt;Кристина Курьян: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Указатели на функции в С ==&lt;br /&gt;
Рассмотрим метод qsort, который имеет прототип:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void qsort(void *base, size_t nmemb, size_t size, int (*compare)(const void *, const void *));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
где &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int (*compare)(const void *a, const void *b)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
указатель на функцию, которая имеет 2 параметра, и возращает значение:&lt;br /&gt;
* &amp;gt; 0, если a &amp;gt; b &lt;br /&gt;
* = 0, если a == b&lt;br /&gt;
* &amp;lt; 0, если a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Person {&lt;br /&gt;
	int m_age;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Создадим объект структуры Person.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Person *m;&lt;br /&gt;
qsort(m, count, sizeof(Person), &amp;amp;(byage));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Определим функцию byage:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int byage(void const *p1, void const *p2) {&lt;br /&gt;
	return ((Person *)p1)-&amp;gt;age - ((Person *)p2)-&amp;gt;age;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание:&lt;br /&gt;
&lt;br /&gt;
В С нет проверки типов.&lt;br /&gt;
&lt;br /&gt;
Замечание:&lt;br /&gt;
* При объявлении указателя на функцию можем не писать параметры, то есть&lt;br /&gt;
&lt;br /&gt;
int(*)(void const *, void const *);&lt;br /&gt;
* Можно присвоить указателю на функцию значение 0&lt;br /&gt;
&lt;br /&gt;
void f(void *, size_t , size_t , int (*)(const void *, const void *)) = 0;&lt;br /&gt;
* Присваивание&lt;br /&gt;
&lt;br /&gt;
f = &amp;amp;qsort;&lt;br /&gt;
&lt;br /&gt;
* Вызов&lt;br /&gt;
&lt;br /&gt;
f(m, count, sizeof(Person), &amp;amp;byage);&lt;br /&gt;
&lt;br /&gt;
== Указатели на функции в С++ ==&lt;br /&gt;
&lt;br /&gt;
Одно из отличий С и С++ - в С++ есть перегрузка. Тогда получается&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
F f = qsort; // должна вызываться та, что подойдет лучше всего&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Вопрос:&lt;br /&gt;
&lt;br /&gt;
Как происходит работа с шаблонными функциями?&lt;br /&gt;
&lt;br /&gt;
Ответ:&lt;br /&gt;
&lt;br /&gt;
Рассмотрим два примера.&lt;br /&gt;
&lt;br /&gt;
Пример 1:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template &amp;lt;class It, class F&amp;gt; void A(It p, It q, F f);&lt;br /&gt;
A(v.begin(), v.end(), (int(*)(int))sqrt); // необходимо приведение типов&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Пример 2:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template &amp;lt;class T&amp;gt; T sqrt(T *);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Нам необходимо проинстанциировать функцию, для этого существует несколько способов:&lt;br /&gt;
*&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sqrt(0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template sqrt&amp;lt;int&amp;gt;; // явно для T = int&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В результате, метод A мы можем вызывать:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
A(v.begin(), v.end(), sqrt&amp;lt;int&amp;gt;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вопрос:&lt;br /&gt;
Как получить указатели на члены класса?&lt;br /&gt;
Ответ:&lt;br /&gt;
Рассмотрим пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Person {&lt;br /&gt;
	int m_age;&lt;br /&gt;
	int m_salary;&lt;br /&gt;
	string m_name;&lt;br /&gt;
	string name() {&lt;br /&gt;
		return m_name;	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int Person::(*p) = &amp;amp;Person::m_age;&lt;br /&gt;
string (Person::*f)() const = &amp;amp;Person::name;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее имеем&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Person pers;&lt;br /&gt;
(pers.*p) = 10;&lt;br /&gt;
(pers.*f)();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вопрос:&lt;br /&gt;
&lt;br /&gt;
Мы имеем указатель на мембер класса. Можем ли мы его передавать как параметр функции?&lt;br /&gt;
&lt;br /&gt;
Ответ:&lt;br /&gt;
&lt;br /&gt;
Да, можем. Пример,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct by_field {&lt;br /&gt;
	by_field(int Person::*field)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание:&lt;br /&gt;
Указатели на мемберы не приводяться ник чему. Они могут проверяться на равенство 0.&lt;/div&gt;</summary>
		<author><name>Кристина Курьян</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D0%B8_%D0%BD%D0%B0_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=226</id>
		<title>Указатели на функции</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D0%B8_%D0%BD%D0%B0_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=226"/>
				<updated>2011-05-13T21:49:04Z</updated>
		
		<summary type="html">&lt;p&gt;Кристина Курьян: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Указатели на функции в С ==&lt;br /&gt;
Рассмотрим метод qsort, который имеет прототип:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void qsort(void *base, size_t nmemb, size_t size, int (*compare)(const void *, const void *));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
где &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int (*compare)(const void *a, const void *b)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
указатель на функцию, которая имеет 2 параметра, и возращает значение:&lt;br /&gt;
* &amp;gt; 0, если a &amp;gt; b &lt;br /&gt;
* = 0, если a == b&lt;br /&gt;
* &amp;lt; 0, если a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Person {&lt;br /&gt;
	int m_age;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Создадим объект структуры Person.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Person *m;&lt;br /&gt;
qsort(m, count, sizeof(Person), &amp;amp;(byage));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Определим функцию byage:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int byage(void const *p1, void const *p2) {&lt;br /&gt;
	return ((Person *)p1)-&amp;gt;age - ((Person *)p2)-&amp;gt;age;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание:&lt;br /&gt;
&lt;br /&gt;
В С нет проверки типов.&lt;br /&gt;
&lt;br /&gt;
Замечание:&lt;br /&gt;
* При объявлении можем не писать параметры&lt;br /&gt;
&lt;br /&gt;
int(*)(void const *, void const *);&lt;br /&gt;
* Можно присвоить указателю на функцию значение 0&lt;br /&gt;
&lt;br /&gt;
void а(void *, size_t , size_t , int (*)(const void *, const void *)) = 0;&lt;br /&gt;
* Присваивание&lt;br /&gt;
&lt;br /&gt;
f = &amp;amp;qsort;&lt;br /&gt;
&lt;br /&gt;
Вызов&lt;br /&gt;
&lt;br /&gt;
f(m, count, sizeof(Person), &amp;amp;byage);&lt;br /&gt;
&lt;br /&gt;
== Указатели на функции в С++ ==&lt;br /&gt;
&lt;br /&gt;
Одно из отличие С и С++ - в С++ есть перегрузка. Тогда получается&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
F f = qsort; // будет вызываться, что подойдет лучше всего&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Вопрос:&lt;br /&gt;
&lt;br /&gt;
Как происходит работа с шаблонными функциями?&lt;br /&gt;
&lt;br /&gt;
Ответ:&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример 1:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template &amp;lt;class It, class F&amp;gt; void A(It p, It q, F f);&lt;br /&gt;
A(v.begin(), v.end(), (int(*)(int))sqrt); // необходимо приведение типов&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
пример 2:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template &amp;lt;class T&amp;gt; T sqrt(T *);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Нам необходимо проинстанциировать функцию, для этого существует несколько способов:&lt;br /&gt;
*&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sqrt(0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template sqrt&amp;lt;int&amp;gt;; // явно для T = int&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В результате, метод A мы можем вызывать:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
A(v.begin(), v.end(), sqrt&amp;lt;int&amp;gt;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вопрос:&lt;br /&gt;
Как получить указатели на члены класса?&lt;br /&gt;
Ответ:&lt;br /&gt;
Рассмотрим пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Person {&lt;br /&gt;
	int m_age;&lt;br /&gt;
	int m_salary;&lt;br /&gt;
	string m_name;&lt;br /&gt;
	string name() {&lt;br /&gt;
		return m_name;	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int Person::(*p) = &amp;amp;Person::m_age;&lt;br /&gt;
string (Person::*f)() const = &amp;amp;Person::name;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее имеем&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Person pers;&lt;br /&gt;
(pers.*p) = 10;&lt;br /&gt;
(pers.*f)();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вопрос:&lt;br /&gt;
&lt;br /&gt;
Мы имеем указатель на мембер класса. Можем ли мы его передавать как параметр функции?&lt;br /&gt;
&lt;br /&gt;
Ответ:&lt;br /&gt;
&lt;br /&gt;
Да, можем. К примеру,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct by_field {&lt;br /&gt;
	by_field(int Person::*field)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание:&lt;br /&gt;
Указатели на мемберы не приводяться ник чему. Они могут проверяться на равенство 0.&lt;/div&gt;</summary>
		<author><name>Кристина Курьян</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D0%B8_%D0%BD%D0%B0_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=225</id>
		<title>Указатели на функции</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D0%B8_%D0%BD%D0%B0_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=225"/>
				<updated>2011-05-13T21:45:51Z</updated>
		
		<summary type="html">&lt;p&gt;Кристина Курьян: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Указатели на функции в С ==&lt;br /&gt;
Рассмотрим метод qsort, который имеет прототип:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void qsort(void *base, size_t nmemb, size_t size, int (*compare)(const void *, const void *));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
где &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int (*compare)(const void *a, const void *b)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
указатель на функцию, которая имеет 2 параметра, и должна возращать значение:&lt;br /&gt;
* &amp;gt; 0, если a &amp;gt; b &lt;br /&gt;
* = 0, если a == b&lt;br /&gt;
* &amp;lt; 0, если a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Person {&lt;br /&gt;
	int m_age;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Person *m;&lt;br /&gt;
qsort(m, count, sizeof(Person), &amp;amp;(byage));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Запишем функцию byage:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int byage(void const *p1, void const *p2) {&lt;br /&gt;
	return ((Person *)p1)-&amp;gt;age - ((Person *)p2)-&amp;gt;age;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание:&lt;br /&gt;
&lt;br /&gt;
В данном примере, что нет проверки типов.&lt;br /&gt;
&lt;br /&gt;
Замечание:&lt;br /&gt;
* При объявлении можем не писать параметры&lt;br /&gt;
&lt;br /&gt;
int(*)(void const *, void const *);&lt;br /&gt;
* Можно присвоить указателю на функцию значение 0&lt;br /&gt;
&lt;br /&gt;
void а(void *, size_t , size_t , int (*)(const void *, const void *)) = 0;&lt;br /&gt;
* Присваивание&lt;br /&gt;
&lt;br /&gt;
f = &amp;amp;qsort;&lt;br /&gt;
&lt;br /&gt;
Вызов&lt;br /&gt;
&lt;br /&gt;
f(m, count, sizeof(Person), &amp;amp;byage);&lt;br /&gt;
&lt;br /&gt;
== Указатели на функции в С++ ==&lt;br /&gt;
&lt;br /&gt;
Одно из отличие С и С++ - в С++ есть перегрузка. Тогда получается&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
F f = qsort; // будет вызываться, что подойдет лучше всего&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Вопрос:&lt;br /&gt;
&lt;br /&gt;
Как происходит работа с шаблонными функциями?&lt;br /&gt;
&lt;br /&gt;
Ответ:&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример 1:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template &amp;lt;class It, class F&amp;gt; void A(It p, It q, F f);&lt;br /&gt;
A(v.begin(), v.end(), (int(*)(int))sqrt); // необходимо приведение типов&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
пример 2:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template &amp;lt;class T&amp;gt; T sqrt(T *);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Нам необходимо проинстанциировать функцию, для этого существует несколько способов:&lt;br /&gt;
*&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sqrt(0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template sqrt&amp;lt;int&amp;gt;; // явно для T = int&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В результате, метод A мы можем вызывать:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
A(v.begin(), v.end(), sqrt&amp;lt;int&amp;gt;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вопрос:&lt;br /&gt;
Как получить указатели на члены класса?&lt;br /&gt;
Ответ:&lt;br /&gt;
Рассмотрим пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Person {&lt;br /&gt;
	int m_age;&lt;br /&gt;
	int m_salary;&lt;br /&gt;
	string m_name;&lt;br /&gt;
	string name() {&lt;br /&gt;
		return m_name;	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int Person::(*p) = &amp;amp;Person::m_age;&lt;br /&gt;
string (Person::*f)() const = &amp;amp;Person::name;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее имеем&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Person pers;&lt;br /&gt;
(pers.*p) = 10;&lt;br /&gt;
(pers.*f)();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вопрос:&lt;br /&gt;
&lt;br /&gt;
Мы имеем указатель на мембер класса. Можем ли мы его передавать как параметр функции?&lt;br /&gt;
&lt;br /&gt;
Ответ:&lt;br /&gt;
&lt;br /&gt;
Да, можем. К примеру,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct by_field {&lt;br /&gt;
	by_field(int Person::*field)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание:&lt;br /&gt;
Указатели на мемберы не приводяться ник чему. Они могут проверяться на равенство 0.&lt;/div&gt;</summary>
		<author><name>Кристина Курьян</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D0%B8_%D0%BD%D0%B0_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=224</id>
		<title>Указатели на функции</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D0%B8_%D0%BD%D0%B0_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=224"/>
				<updated>2011-05-13T21:35:12Z</updated>
		
		<summary type="html">&lt;p&gt;Кристина Курьян: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Указатели на функции в С ==&lt;br /&gt;
Рассмотрим метод qsort, который имеет прототип:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
void qsort(void *base, size_t nmemb, size_t size, int (*compare)(const void *, const void *));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
где &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int (*compare)(const void *a, const void *b)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
указатель на функцию, которая имеет 2 параметра, и должна возращать значение:&lt;br /&gt;
* &amp;gt; 0, если a &amp;gt; b &lt;br /&gt;
* = 0, если a == b&lt;br /&gt;
* &amp;lt; 0, если a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Person {&lt;br /&gt;
	int m_age;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Person *m;&lt;br /&gt;
qsort(m, count, sizeof(Person), &amp;amp;(byage));&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
== Указатели на функции в С++ ==&lt;br /&gt;
&lt;br /&gt;
Одно из отличие С и С++ - в С++ есть перегрузка. Тогда получается&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
F f = qsort; // будет вызываться, что подойдет лучше всего&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Вопрос:&lt;br /&gt;
&lt;br /&gt;
Как происходит работа с шаблонными функциями?&lt;br /&gt;
&lt;br /&gt;
Ответ:&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример 1:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template &amp;lt;class It, class F&amp;gt; void A(It p, It q, F f);&lt;br /&gt;
A(v.begin(), v.end(), (int(*)(int))sqrt); // необходимо приведение типов&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
пример 2:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template &amp;lt;class T&amp;gt; T sqrt(T *);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Нам необходимо проинстанциировать функцию, для этого существует несколько способов:&lt;br /&gt;
*&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sqrt(0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template sqrt&amp;lt;int&amp;gt;; // явно для T = int&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В результате, метод A мы можем вызывать:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
A(v.begin(), v.end(), sqrt&amp;lt;int&amp;gt;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вопрос:&lt;br /&gt;
Как получить указатели на члены класса?&lt;br /&gt;
Ответ:&lt;br /&gt;
Рассмотрим пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Person {&lt;br /&gt;
	int m_age;&lt;br /&gt;
	int m_salary;&lt;br /&gt;
	string m_name;&lt;br /&gt;
	string name() {&lt;br /&gt;
		return m_name;	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int Person::(*p) = &amp;amp;Person::m_age;&lt;br /&gt;
string (Person::*f)() const = &amp;amp;Person::name;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее имеем&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Person pers;&lt;br /&gt;
(pers.*p) = 10;&lt;br /&gt;
(pers.*f)();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вопрос:&lt;br /&gt;
&lt;br /&gt;
Мы имеем указатель на мембер класса. Можем ли мы его передавать как параметр функции?&lt;br /&gt;
&lt;br /&gt;
Ответ:&lt;br /&gt;
&lt;br /&gt;
Да, можем. К примеру,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct by_field {&lt;br /&gt;
	by_field(int Person::*field)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание:&lt;br /&gt;
Указатели на мемберы не приводяться ник чему. Они могут проверяться на равенство 0.&lt;/div&gt;</summary>
		<author><name>Кристина Курьян</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D0%B8_%D0%BD%D0%B0_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=223</id>
		<title>Указатели на функции</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D0%B8_%D0%BD%D0%B0_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=223"/>
				<updated>2011-05-13T21:25:33Z</updated>
		
		<summary type="html">&lt;p&gt;Кристина Курьян: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Указатели на функции в С ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Указатели на функции в С++ ==&lt;br /&gt;
&lt;br /&gt;
Одно из отличие С и С++ - в С++ есть перегрузка. Тогда получается&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
F f = qsort; // будет вызываться, что подойдет лучше всего&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Вопрос:&lt;br /&gt;
&lt;br /&gt;
Как происходит работа с шаблонными функциями?&lt;br /&gt;
&lt;br /&gt;
Ответ:&lt;br /&gt;
&lt;br /&gt;
Рассмотрим пример 1:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template &amp;lt;class It, class F&amp;gt; void A(It p, It q, F f);&lt;br /&gt;
A(v.begin(), v.end(), (int(*)(int))sqrt); // необходимо приведение типов&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
пример 2:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template &amp;lt;class T&amp;gt; T sqrt(T *);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Нам необходимо проинстанциировать функцию, для этого существует несколько способов:&lt;br /&gt;
*&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
sqrt(0);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
*&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
template sqrt&amp;lt;int&amp;gt;; // явно для T = int&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В результате, метод A мы можем вызывать:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
A(v.begin(), v.end(), sqrt&amp;lt;int&amp;gt;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вопрос:&lt;br /&gt;
Как получить указатели на члены класса?&lt;br /&gt;
Ответ:&lt;br /&gt;
Рассмотрим пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Person {&lt;br /&gt;
	int m_age;&lt;br /&gt;
	int m_salary;&lt;br /&gt;
	string m_name;&lt;br /&gt;
	string name() {&lt;br /&gt;
		return m_name;	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int Person::(*p) = &amp;amp;Person::m_age;&lt;br /&gt;
string (Person::*f)() const = &amp;amp;Person::name;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее имеем&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Person pers;&lt;br /&gt;
(pers.*p) = 10;&lt;br /&gt;
(pers.*f)();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вопрос:&lt;br /&gt;
&lt;br /&gt;
Мы имеем указатель на мембер класса. Можем ли мы его передавать как параметр функции?&lt;br /&gt;
&lt;br /&gt;
Ответ:&lt;br /&gt;
&lt;br /&gt;
Да, можем. К примеру,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct by_field {&lt;br /&gt;
	by_field(int Person::*field)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание:&lt;br /&gt;
Указатели на мемберы не приводяться ник чему. Они могут проверяться на равенство 0.&lt;/div&gt;</summary>
		<author><name>Кристина Курьян</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D0%B8_%D0%BD%D0%B0_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=222</id>
		<title>Указатели на функции</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%A3%D0%BA%D0%B0%D0%B7%D0%B0%D1%82%D0%B5%D0%BB%D0%B8_%D0%BD%D0%B0_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8&amp;diff=222"/>
				<updated>2011-05-13T20:51:24Z</updated>
		
		<summary type="html">&lt;p&gt;Кристина Курьян: Новая страница: «Указатели на функции в С++ Одно из отличие С и С++ - в С++ есть перегрузка. Тогда получается F f =…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Указатели на функции в С++&lt;br /&gt;
Одно из отличие С и С++ - в С++ есть перегрузка. Тогда получается&lt;br /&gt;
F f = qsort; // будет вызываться, что подойдет лучше всего&lt;br /&gt;
Вопрос:&lt;br /&gt;
Как происходит работа с шаблонными функциями?&lt;br /&gt;
Ответ:&lt;br /&gt;
Рассмотрим пример:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Вопрос:&lt;br /&gt;
Как получить указатели на члены класса?&lt;br /&gt;
Ответ:&lt;br /&gt;
Рассмотрим пример:&lt;br /&gt;
struct Person {&lt;br /&gt;
	int m_age;&lt;br /&gt;
	int m_salary;&lt;br /&gt;
	string m_name;&lt;br /&gt;
	string name() {&lt;br /&gt;
		return m_name;	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
Тогда &lt;br /&gt;
int Person::(*p) = &amp;amp;Person::m_age;&lt;br /&gt;
string (Person::*f)() const = &amp;amp;Person::name;  &lt;br /&gt;
&lt;br /&gt;
Далее имеем&lt;br /&gt;
Person pers;&lt;br /&gt;
(pers.*p) = 10;&lt;br /&gt;
(pers.*f)();&lt;br /&gt;
&lt;br /&gt;
Вопрос:&lt;br /&gt;
Мы имеем указатель на мембер класса. Можем ли мы его передавать как параметр функции?&lt;br /&gt;
Ответ:&lt;br /&gt;
Да, можем. К примеру,&lt;br /&gt;
&lt;br /&gt;
struct by_field {&lt;br /&gt;
	by_field(int Person::*field)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Замечание:&lt;br /&gt;
Указатели на мемберы не приводяться ник чему. Они могут проверяться на равенство 0.&lt;/div&gt;</summary>
		<author><name>Кристина Курьян</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82%D1%8B_%D0%A1%2B%2B&amp;diff=221</id>
		<title>Конспекты С++</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82%D1%8B_%D0%A1%2B%2B&amp;diff=221"/>
				<updated>2011-05-13T19:17:16Z</updated>
		
		<summary type="html">&lt;p&gt;Кристина Курьян: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 1 семестр (осень-зима 2010) ==&lt;br /&gt;
&lt;br /&gt;
* [[ Как происходит компиляция|Как происходит компиляция. Алексей Давыдов. 08.09.2010]]&lt;br /&gt;
* [[ Указатели и ссылки|Указатели и ссылки. Екатерина Полищук. 10.09.2010]]&lt;br /&gt;
* [[ Динамическое распределение памяти|Динамическое распределение памяти. Алексей Гуревич. 17.09.2010]]&lt;br /&gt;
* [[ Классы|Классы. Курьян Кристина. 08.10.2010]]&lt;br /&gt;
* [[ Перегрузка операторов|Перегрузка операторов. Мария Фомкина. 12.11.2010]]&lt;br /&gt;
&lt;br /&gt;
== 2 семестр (зима-весна 2011) ==&lt;br /&gt;
&lt;br /&gt;
* [[ Напоминание про inline и static. Синглтон.|Напоминание про inline и static. Синглтон. Екатерина Полищук. 11.02.2011]]&lt;br /&gt;
* [[ STL. Последовательные контейнеры|STL. Последовательные контейнеры. Мария Фомкина. 18.02.2011]]&lt;br /&gt;
* [[ Указатели на функции|Указатели на функции. Курьян Кристина. 18.03.2011]]&lt;br /&gt;
* [[ Метапрограммирование на C++ | Метапрограммирование на C++. Александр Карташов. 06.05.2011 ]]&lt;/div&gt;</summary>
		<author><name>Кристина Курьян</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B&amp;diff=218</id>
		<title>Классы</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D1%8B&amp;diff=218"/>
				<updated>2011-05-12T20:08:30Z</updated>
		
		<summary type="html">&lt;p&gt;Кристина Курьян: Новая страница: «'''Ликбез по лекции 8 октября'''   На прошлой лекции были рассмотрены следующие вопросы касаю…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Ликбез по лекции 8 октября'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
На прошлой лекции были рассмотрены следующие вопросы касающиеся классов: 	&lt;br /&gt;
* Методы &lt;br /&gt;
* Конструкторы&lt;br /&gt;
* Деструкторы&lt;br /&gt;
* Конструкторы копирования&lt;br /&gt;
* Оператор присваивания &lt;br /&gt;
&lt;br /&gt;
Поставим задачу: &lt;br /&gt;
&lt;br /&gt;
Необходимо написать класс рациональных чисел. Для начала напишем класс с 2 переменными m_num(числитель), m_denom(знаменатель): &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Rational &lt;br /&gt;
{ &lt;br /&gt;
	int m_num; &lt;br /&gt;
	int m_denom; &lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Добавим конструктор &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Rational &lt;br /&gt;
{ &lt;br /&gt;
	int m_num; &lt;br /&gt;
	int m_denom; &lt;br /&gt;
	Rational(): m_num(0), m_denom(1)    // конструктор по умолчанию &lt;br /&gt;
	{} &lt;br /&gt;
&lt;br /&gt;
	Rational(int n): m_num(n), m_denom(1)  // конструктор для целых чисел&lt;br /&gt;
	{} &lt;br /&gt;
&lt;br /&gt;
	Rational(int a, int b): m_num(a), m_denom(b) // конструктор для дробей &lt;br /&gt;
	{} &lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Что бы избежать повторения, можно сделать 3 конструкторов 1 с параметрами по &lt;br /&gt;
умолчанию, таким образом получаем:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Rational &lt;br /&gt;
{ &lt;br /&gt;
	int m_num; &lt;br /&gt;
	int m_denom; &lt;br /&gt;
	Rational(int a = 0, int b = 1): m_num(a), m_denom(b) &lt;br /&gt;
	{&lt;br /&gt;
		normalize();  // получим несократимую дробь.&lt;br /&gt;
	} &lt;br /&gt;
&lt;br /&gt;
	void normalize();  // метод для сокращения дробей &lt;br /&gt;
}; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Но получившийся класс не является надежным. Рассмотрим его недостатки: &lt;br /&gt;
переменные m_num, m_denom являются открытыми, следовательно их можно &lt;br /&gt;
изменить из другого модуля и это изменения будет сложно отследить. Таким образом может произойти &lt;br /&gt;
нарушение инварианта у класса. Для решения этой проблемы необходимо установить идентификаторы доступа. &lt;br /&gt;
&lt;br /&gt;
В с++ существует 3 идентификатора. &lt;br /&gt;
* public — методы, переменные могут быть вызваны/изменены из кода другого модуля. &lt;br /&gt;
* private — методы, переменные могут вызывать только из модуля где они определены&lt;br /&gt;
* protected — будет рассказано позже. &lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Rational &lt;br /&gt;
{ &lt;br /&gt;
private: &lt;br /&gt;
	int m_num; &lt;br /&gt;
	int m_denom; &lt;br /&gt;
public: &lt;br /&gt;
	Rational(int a = 0, int b = 1): m_num(a), m_denom(b)   // конструктор для дробей &lt;br /&gt;
	{} &lt;br /&gt;
}; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь, из другого модуля переменные не могут быть изменены. Таким образом, вызовы типа &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Rational r(4, 5); &lt;br /&gt;
r.m_num = 10;  // будет ошибка &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
не позволят изменить переменные. &lt;br /&gt;
&lt;br /&gt;
Вопрос: &lt;br /&gt;
&lt;br /&gt;
Как корректно уметь получать, изменять и отслеживать изменения private &lt;br /&gt;
переменных. &lt;br /&gt;
&lt;br /&gt;
Ответ: &lt;br /&gt;
&lt;br /&gt;
Необходимо для каждой переменной завести пару методов get/set, которые будут &lt;br /&gt;
устанавливать и получать соответствующие значения. К примеру: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Rational &lt;br /&gt;
{ &lt;br /&gt;
private: &lt;br /&gt;
	int m_num; &lt;br /&gt;
	int m_denom; &lt;br /&gt;
public: &lt;br /&gt;
	Rational(int a = 0, int b = 1): m_num(a), m_denom(b) &lt;br /&gt;
	{} &lt;br /&gt;
	&lt;br /&gt;
	void setNum(int a); &lt;br /&gt;
	int getNum(); &lt;br /&gt;
	void setDenom(int b); &lt;br /&gt;
	int getDenom(); &lt;br /&gt;
}; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание 1 &lt;br /&gt;
&lt;br /&gt;
Рассмотрим конструктор со списоком инициализации членов класса в данной задачи, то &lt;br /&gt;
есть: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Rational(int a = 0, int b = 1): m_num(a), m_denom(b) // конструктор для дробей &lt;br /&gt;
{} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вопрос: &lt;br /&gt;
&lt;br /&gt;
Что будет если изменить порядок инициализации, то есть &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
Rational(int a = 0, int b = 1): m_denom(b), m_num(a) &lt;br /&gt;
{} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ответ: &lt;br /&gt;
&lt;br /&gt;
Ничего не измениться, так как переменные инициализируются в том порядке, в котором они описаны в классе, то есть &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Rational &lt;br /&gt;
{ &lt;br /&gt;
private: &lt;br /&gt;
	int m_num; &lt;br /&gt;
	int m_denom; &lt;br /&gt;
public: &lt;br /&gt;
	Rational(int a = 0, int b = 1): m_num(a), m_denom(b) &lt;br /&gt;
	{} &lt;br /&gt;
}; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Всегда будет сначала будет инициализирована переменная m_num, а затем m_denom. &lt;br /&gt;
&lt;br /&gt;
Вопрос: &lt;br /&gt;
&lt;br /&gt;
В каком порядке будет происходить вызов деструкторов полей. &lt;br /&gt;
&lt;br /&gt;
Ответ: &lt;br /&gt;
&lt;br /&gt;
Вызов деструкторов происходит в порядке обратном вызову конструкторов. К примеру &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Rational &lt;br /&gt;
{ &lt;br /&gt;
private: &lt;br /&gt;
	int m_num; &lt;br /&gt;
	int m_denom; &lt;br /&gt;
public: &lt;br /&gt;
	Rational(int a = 0, int b = 1): m_num(a), m_denom(b)  // конструктор для дробей &lt;br /&gt;
	{} &lt;br /&gt;
}; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сначала будет вызван деструктор для m_denom, а затем для m_num. &lt;br /&gt;
Замечание 2(дополнение для оператора присваивания):&lt;br /&gt;
 &lt;br /&gt;
Может быть опасно присваивать объект самому себе, для запрета необходимо при перегрузке оператора присваивания делать сравнение с *this. &lt;br /&gt;
&lt;br /&gt;
Замечание 3 &lt;br /&gt;
&lt;br /&gt;
Для упрощения работы необходимо уметь легко отличать переменные класса от локальных объектов, создающихся во время работы класса. Существует множество &lt;br /&gt;
нотации, рассмотрим несколько примеров: &lt;br /&gt;
* int num_; // то есть после имени переменной класса необходимо ставит _ &lt;br /&gt;
* int _num; // то есть перед имени переменной класса необходимо ставит _, но если имя &lt;br /&gt;
вашей переменной начинается с большой буквы(к примеру _GHB), происходит конфликт &lt;br /&gt;
имен &lt;br /&gt;
* int myNum; &lt;br /&gt;
&lt;br /&gt;
Замечание 4 &lt;br /&gt;
&lt;br /&gt;
Идентификаторы доступа private, public не являются сигнатурой. &lt;br /&gt;
&lt;br /&gt;
Пример: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Rational &lt;br /&gt;
{ &lt;br /&gt;
private: &lt;br /&gt;
	int m_num; &lt;br /&gt;
	int m_denom; &lt;br /&gt;
public: &lt;br /&gt;
	Rational(int a = 0, int b = 1); &lt;br /&gt;
	int getNum(); &lt;br /&gt;
}; &lt;br /&gt;
Rational::Rational(int a, int b) : m_num(a), m_denom(b) &lt;br /&gt;
{} &lt;br /&gt;
int Rational::getNum() &lt;br /&gt;
{ &lt;br /&gt;
return m_num; &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Замечание 5 &lt;br /&gt;
&lt;br /&gt;
Если объявление функции находить в файле *,h, то функция по умолчанию становиться inline. &lt;br /&gt;
Рассмотрим пример &lt;br /&gt;
&amp;lt;source lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
struct Rational &lt;br /&gt;
{ &lt;br /&gt;
private: &lt;br /&gt;
	int m_num; &lt;br /&gt;
	int m_denom; &lt;br /&gt;
public: &lt;br /&gt;
	Rational(int a = 0, int b = 1): m_num(a), m_denom(b)  // конструктор для дробей &lt;br /&gt;
	{} &lt;br /&gt;
	&lt;br /&gt;
	int getNum() &lt;br /&gt;
	{ &lt;br /&gt;
		return m_num; &lt;br /&gt;
	} &lt;br /&gt;
}; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То есть теперь getNum() теперь является inline, то есть по стандарту, код может быть с оптимизирован компилятором, и в результате, метод getNum может автоматически быть встроеным в код. &lt;br /&gt;
&lt;br /&gt;
Замечание 6 &lt;br /&gt;
&lt;br /&gt;
ODR — one defenition rule &lt;br /&gt;
Это значит что не должно быть в программе двух inline функции с одинаковыми именам. &lt;br /&gt;
Так же для каждой inline функции должна быть известна её реализация.&lt;/div&gt;</summary>
		<author><name>Кристина Курьян</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82%D1%8B_%D0%A1%2B%2B&amp;diff=217</id>
		<title>Конспекты С++</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9A%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82%D1%8B_%D0%A1%2B%2B&amp;diff=217"/>
				<updated>2011-05-12T19:53:15Z</updated>
		
		<summary type="html">&lt;p&gt;Кристина Курьян: /* 1 семестр (осень-зима 2010) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== 1 семестр (осень-зима 2010) ==&lt;br /&gt;
&lt;br /&gt;
* [[ Как происходит компиляция|Как происходит компиляция. Алексей Давыдов. 08.09.2010]]&lt;br /&gt;
* [[ Указатели и ссылки|Указатели и ссылки. Екатерина Полищук. 10.09.2010]]&lt;br /&gt;
* [[ Динамическое распределение памяти|Динамическое распределение памяти. Алексей Гуревич. 17.09.2010]]&lt;br /&gt;
* [[ Классы|Классы. Курьян Кристина. 08.10.2010]]&lt;br /&gt;
* [[ Перегрузка операторов|Перегрузка операторов. Мария Фомкина. 12.11.2010]]&lt;br /&gt;
&lt;br /&gt;
== 2 семестр (зима-весна 2011) ==&lt;br /&gt;
&lt;br /&gt;
* [[ Напоминание про inline и static. Синглтон.|Напоминание про inline и static. Синглтон. Екатерина Полищук. 11.02.2011]]&lt;br /&gt;
* [[ STL. Последовательные контейнеры|STL. Последовательные контейнеры. Мария Фомкина. 18.02.2011]]&lt;br /&gt;
* [[ Метапрограммирование на C++ | Метапрограммирование на C++. Александр Карташов. 06.05.2011 ]]&lt;/div&gt;</summary>
		<author><name>Кристина Курьян</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9C%D0%B5%D1%80%D0%BE%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D1%8F&amp;diff=180</id>
		<title>Мероприятия</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9C%D0%B5%D1%80%D0%BE%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D1%8F&amp;diff=180"/>
				<updated>2011-04-11T20:01:34Z</updated>
		
		<summary type="html">&lt;p&gt;Кристина Курьян: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Апрель 2011 ==&lt;br /&gt;
* ADD 2011. Application Developer Days. http://www.addconf.ru/ (платно)&lt;br /&gt;
* 25-29 9th FRUCT Conference http://fruct.org/conference9 (бесплатно)&lt;br /&gt;
&lt;br /&gt;
== Май 2011 ==&lt;br /&gt;
* 13 Мая 2011, 10:00. CodeCamp 2011 — http://nevacamp.timepad.ru/event/4930 (бесплатно)&lt;br /&gt;
* 26-27 Мая 2011 Microsoft DevCon'11 — http://www.microsoft.com/ru-ru/events/devcon/ (платно)&lt;br /&gt;
* 9-11 Мая 2011 Fruct MeeGo 1/Ru http://fruct.org/meego1 (бесплатно)&lt;br /&gt;
* 13-14 Мая 2011 Конференция разработчиков компьютерных игр http://kriconf.ru/2011/ (платно)&lt;br /&gt;
&lt;br /&gt;
== Июль 2011 ==&lt;br /&gt;
* Microsoft Computer Vision School http://summerschool2011.graphicon.ru/ (подача заявки до 30 апр)&lt;br /&gt;
* Summer School in Software Engineering and Verification http://research.microsoft.com/en-us/um/redmond/events/SSSEV2011/ (подача заявки до 15 апр)&lt;br /&gt;
&lt;br /&gt;
Вот тут можно посмотреть большой список конференций:&lt;br /&gt;
http://it-event.ru/upcoming/&lt;/div&gt;</summary>
		<author><name>Кристина Курьян</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9C%D0%B5%D1%80%D0%BE%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D1%8F&amp;diff=179</id>
		<title>Мероприятия</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9C%D0%B5%D1%80%D0%BE%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D1%8F&amp;diff=179"/>
				<updated>2011-04-11T19:59:41Z</updated>
		
		<summary type="html">&lt;p&gt;Кристина Курьян: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Апрель 2011 ==&lt;br /&gt;
* ADD 2011. Application Developer Days. http://www.addconf.ru/ (платно)&lt;br /&gt;
* 25-29 9th FRUCT Conference http://fruct.org/conference9 (бесплатно)&lt;br /&gt;
&lt;br /&gt;
== Май 2011 ==&lt;br /&gt;
* 13 Мая 2011, 10:00. CodeCamp 2011 — http://nevacamp.timepad.ru/event/4930 (бесплатно)&lt;br /&gt;
* 26-27 Мая 2011 Microsoft DevCon'11 — http://www.microsoft.com/ru-ru/events/devcon/ (платно)&lt;br /&gt;
* 9-11 Мая 2011 Fruct MeeGo 1/Ru http://fruct.org/meego1 (бесплатно)&lt;br /&gt;
* 13-14 Мая 2011 Конференция разработчиков компьютерных игр http://kriconf.ru/2011/ (платно)&lt;br /&gt;
&lt;br /&gt;
== Июнь 2011 ==&lt;br /&gt;
* Microsoft Computer Vision School http://summerschool2011.graphicon.ru/&lt;br /&gt;
* Summer School in Software Engineering and Verification http://research.microsoft.com/en-us/um/redmond/events/SSSEV2011/&lt;br /&gt;
&lt;br /&gt;
Вот тут можно посмотреть большой список конференций:&lt;br /&gt;
http://it-event.ru/upcoming/&lt;/div&gt;</summary>
		<author><name>Кристина Курьян</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9C%D0%B5%D1%80%D0%BE%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D1%8F&amp;diff=178</id>
		<title>Мероприятия</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9C%D0%B5%D1%80%D0%BE%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D1%8F&amp;diff=178"/>
				<updated>2011-04-11T19:58:32Z</updated>
		
		<summary type="html">&lt;p&gt;Кристина Курьян: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Апрель 2011 ==&lt;br /&gt;
* ADD 2011. Application Developer Days. http://www.addconf.ru/ (платно)&lt;br /&gt;
* 25-29 9th FRUCT Conference http://fruct.org/conference9 (бесплатно)&lt;br /&gt;
&lt;br /&gt;
== Май 2011 ==&lt;br /&gt;
* 13 Мая 2011, 10:00. CodeCamp 2011 — http://nevacamp.timepad.ru/event/4930 (бесплатно)&lt;br /&gt;
* 26-27 Мая 2011 Microsoft DevCon'11 — http://www.microsoft.com/ru-ru/events/devcon/ (платно)&lt;br /&gt;
* 9-11 Мая 2011 Fruct MeeGo 1/Ru http://fruct.org/meego1 (бесплатно)&lt;br /&gt;
* 13-14 Мая 2011 Конференция разработчиков компьютерных игр http://kriconf.ru/2011/ (платно)&lt;br /&gt;
Вот тут можно посмотреть большой список конференций:&lt;br /&gt;
http://it-event.ru/upcoming/&lt;br /&gt;
&lt;br /&gt;
== Июнь 2011 ==&lt;br /&gt;
Microsoft Computer Vision School http://summerschool2011.graphicon.ru/&lt;br /&gt;
Summer School in Software Engineering and Verification http://research.microsoft.com/en-us/um/redmond/events/SSSEV2011/&lt;/div&gt;</summary>
		<author><name>Кристина Курьян</name></author>	</entry>

	<entry>
		<id>http://mit.spbau.ru/sewiki/index.php?title=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B&amp;diff=45</id>
		<title>Поисковые системы</title>
		<link rel="alternate" type="text/html" href="http://mit.spbau.ru/sewiki/index.php?title=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA%D0%BE%D0%B2%D1%8B%D0%B5_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B&amp;diff=45"/>
				<updated>2011-03-09T20:24:18Z</updated>
		
		<summary type="html">&lt;p&gt;Кристина Курьян: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Предлагается провести семинар по поисковым системам по базам данных (не про веб-поиск). Формат: много мини-докладов в один день и создание соответствующих страниц в wiki.&lt;br /&gt;
В качестве первого этапа предлагается составить список тем, которые можно было бы обсудить. Сейчас можно только предлагать темы, распределять их будем наследующем этапе.&lt;br /&gt;
&lt;br /&gt;
 * Механизм, архитектура поисковой системы с 3 потоками управления: обработка пользовательских запросов, исполнение запросов, индексирование новых данных.&lt;br /&gt;
 * Алгоритм обратных индексов.&lt;br /&gt;
 * напиши название темы здесь&lt;br /&gt;
 * напиши название темы здесь&lt;/div&gt;</summary>
		<author><name>Кристина Курьян</name></author>	</entry>

	</feed>