Библиотека knigago >> Компьютеры: Языки и системы программирования >> C, C++, C# >> Идиомы и стили С++


Трилогия "Маг. Школа жизни" Александра Купреева - это захватывающая и хорошо продуманная фэнтезийная сага, которая погружает читателей в мир магии, невзгод и личного роста. Мир Купреева богат и разнообразен, населен яркими и запоминающимися персонажами. Главный герой, Грэг, - обычный парень, который обнаруживает в себе скрытые способности и поступает в престижную Школу жизни. Вместе со своими друзьями и наставниками он сталкивается с множеством испытаний, включая предательство,...

Albert Makhmutov - Идиомы и стили С++

Идиомы и стили С++
Книга - Идиомы и стили С++.  Albert Makhmutov  - прочитать полностью в библиотеке КнигаГо
Название:
Идиомы и стили С++
Albert Makhmutov

Жанр:

Современные российские издания, Литература ХXI века (эпоха Глобализации экономики), Программирование: прочее, C, C++, C#

Изадано в серии:

неизвестно

Издательство:

неизвестно

Год издания:

-

ISBN:

неизвестно

Отзывы:

Комментировать

Рейтинг:

Поделись книгой с друзьями!

Помощь сайту: донат на оплату сервера

Краткое содержание книги "Идиомы и стили С++"

Аннотация к этой книге отсутствует.

Читаем онлайн "Идиомы и стили С++". [Страница - 5]

изменять поведение указываемого класса без применения наследования и не изменяя его код, и его новое поведение не будет отражаться на субклассах. Не обязательно СУЩЕСТВЕННО изменять поведение. Можно вести статистику класса или объекта, или сделать объект "только на чтение", поставив модификаторы const на сам оператор -› и возвращаемое значение:

const T* operator-›() const;

И вовсе не надо изменять код класса. Это совсем немаловажно, если у Вас, к примеру, коммерческая библиотека классов.

А еще можно сделать умный указатель на ведущий указатель. Или ведущий указатель на ведущий указатель. Вам не стало еще плохо? Если нет, то alors, en route!

Шаг 7 - Интерфейсы. Интерфейсные указатели.

Извините, тут лирическое отступление. Если хотите пропустить - нажмите PageDown.

2001, март, 5 число. Вот уже седьмой шаг. Я ухлопал на эти шаги весь свой законный Курбан-Байрам, и не соблюдаю намаз. Одако не забываю добавлять коньяк в кофе, что придает определенный колорит… шагам. Остановлюсь на некоторое время. Посмотрим, что получится. Честно говоря, мне нужна обратная связь. Я не Толстой, и не Буч, и не совсем уверен, что эти шаги нужны человечеству. Поэтому я прошу Вас сообщить мне, насколько Вам интересны темы, затронутые мною, и если Вас это не затрудняет - несколько слов о том, кто Вы и какой Ваш опыт работы (я хочу выяснить, в какую аудиторию я попадаю, и куда ввязываюсь), буквально пару строк. У меня есть материал примерно еще на 20-30 шагов по идиоматике, а потом можно будет поковырять объектный анализ. Про анализ замечу: софт девелоперу за бугром предлагается 55-70 тонн баксов в год, а аналисту 90-120. Есть разница? Да и вообще, зачем разбирать идиоматику C++, если потом нарисовать диалоговое окно, положить в него одну кнопку, а на OnClick повесить обработчик одного сообщения, весом в 20 тысяч строк. Ну это личное дело каждого. Я сам так делаю. На дельфях и фокспре.

А можно еще потолковать о распределенных приложениях. Или архитектурных решениях. Блин, надо же подняться как-то над WinAPI и RAS, они же и в MSDN есть. Ну ладно, будет с этим. Конец лирического отступления. Вернемся к нашим баранам, то бишь указателям.

Давайте подумаем, какой интерфейс есть у класса. Его объявление? Верно. Но не все. Интерфейс - это то, что видит клиент. А видят разные клиенты разное. Отношения дружбы, наследования, модификаторы доступа сами по себе изменяют интерфейс. Как мы можем приобрести почти неограниченный контроль над интерфейсом? Ранее рассмотренные ведущие указатели не позволяют изменять интерфейс, ибо перегруженный оператор -› действительно позволяет осуществлять доступ к настоящему интерфейсу, а значит, информация о нем должна быть доступна. Ну и не будем его перегружать. Ничего не мешает просто скопировать нужную часть его интерфейса в определение указателя, и вызывать нужные функции объекта в одноименных функциях указателя. Если нас интересует секретность, то делаем все функции не-подстановочными (то есть определяем их вне объявления класса и без модификатора inline). Вот код:

// Это находится в заголовочном файле.

class Cthat;

class CPthat {

private:

 Cthat* t; // обычный указатель на объект

public:

 CPthat ();

 CPthat (const CPthat&);

 ~CPthat ();

 CPthat& operator=(const CPthat&);

 // Новый интерфейс - дубликат

 void funct1(void);

 void funct2(void);

};


// Это все содержится в cpp-файле.

// и первое - определение указываемого объекта

class Cthat {

 friend class CPthat;

private:

protected:

 Cthat();

public:

 // Родной интерфейс.

 void funct1(void);

 void funct2(void);

};


//Реализация членов-функций класса указателя.

CPthat::CPthat ():t(new Cthat) {}

CPthat::CPthat (const CPthat& _cp):t(new Cthat(*(_cp.t))) {}

CPthat::~CPthat (){ delete t; }

CPthat& CPthat::operator=(const CPthat& _cp) {

 if (this != &_cp) {

  delete t;

  t = new Cthat(*(_cp.t));

 }

 return *this;

}

void CPthat::funct1(void) { t-›funct1(); }

void CPthat::funct2(void) { t-›funct2(); }


// Реализация членов-функций класса объекта

Cthat::Cthat() {}

void Cthat::funct1(void) {}

void Cthat::funct2(void) {}

Все, приплыли. От класса указываемых объектов остался только перископ в виде class Cthat;, а более ничего. CPthat действует вместо него. Он сам стал им. Класс CPthat является классом интерфейсного указателя.

Теперь можете идти за пивом. Вы властелин вселенной. Вы можете превратить кого угодно во что угодно. Имея на вооружении идиомы умных, ведущих и интерфейсных указателей, сочетая их в любых комбинациях, Вы можете превратить в урода любой класс на выбор. Или в красавца. Ваше --">

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


Ваш e-mail является приватным и не будет опубликован в комментарии.