Чтение онлайн

на главную - закладки

Жанры

C++. Сборник рецептов

Когсуэлл Джефф

Шрифт:

 void setName(const std::string& name) { name_ = name; }

 void setSpecies(const std::string& species) { species_ = species; }

 void setDateOfBirth(const std::string& dob) {

dob_ = boost::gregorian::from_string(dob);

 }

 void setVeterinarian(const Contact& vet) { vet_ = vet; }

 void setTrainer(const Contact& trainer) { trainer_ = trainer; }

private:

 std::string name_;

 std::string species_;

 boost::gregorian::date dob_;

 Contact vet_;

 Contact trainer_;

};

//
Сравнение на равенство двух объектов Animal; используется в рецепте 14.9

// (для полноты следует также определить operator!=)

bool operator==(const Animal& lhs, const Animal& rhs) {

 return lhs.name == rhs.name && lhs.species == rhs.species &&

lhs.dateOfBirth == rhs.dateOfBirth &&

lhs.veterinarian == rhs.veterinarian &&

lhs.trainer == rhs.trainer;

}

// Записывает объект Animal в поток ostream

std::ostream& operator<<(std::ostream& out, const Animal& animal) {

 out << "Animal {\n"

<< " name=" << animal.name << ";\n"

<< " species=" << animal.species << ";\n"

<< date-of-birth=" << animal.dateOfBirth << ";\n"

<< " veterinarian=" << animal.veterinarian << ";\n"

<< " trainer=" << animal.trainer << ";\n"

<< "}";

 return out;

}

#endif // #ifndef ANIMALS_HPP_INCLUDED

Пример 14.3. Синтаксический анализ animals.xml с помощью TinyXml

#include <exception>

#include <iostream> // cout

#include <stdexcept> // runtime_error

#include <cstdlib> // EXIT_FAILURE

#include <cstring> // strcmp

#include <vector>

#include <tinyxml.h>

#include "animal.hpp"

using namespace std;

//
Извлекает текстовое содержимое элемента XML

const char* textValue("TiXmlElement* e) {

 TiXmlNode* first = fi->FirstChild;

 if (first != 0 && first == e->LastChild &&

first->Type == TiXmlNode::TEXT) {

// элемент «е» имеет один дочерний элемент типа TEXT;

// возвратить дочерний элемент

return first->Value;

 } else {

throw runtime_error(string("bad ") + e->Value + " element");

 }

}

// Конструирует объект класса Contact из элементов ветеринара или

// дрессировщика ("veterinarian" или "trainer")

Contact nodeToContact(TiXmlElement* contact) {

 using namespace std;

 const char *name, *phone;

 if (contact->FirstChild == 0 &&

(name = contact->Attribute("name")) &&

(phone = contact->Attribute("phone"))) {

// Элемент contact не имеет дочерних элементов и имеет атрибуты имени

// и телефона ("name" и "phone"); используйте эти значения для

// конструирования объекта Contact

return Contact(name, phone);

 } else {

throw runtime_error(string("bad ") + contact->Value + " element");

 }

}

// Конструирует объект Animal из элемента животного ("animal")

Animal nodeToAnimal(TiXmlElement* animal) {

 using namespace std;

 // Убедиться, что animal соответствует элементу "animal"

 if (strcmp(animal->Value, "animal") != 0) {

throw runtime_error(string("bad animal: ") + animal->Value);

 }

 Animal result; // Возвратить значение

 TiXmlElement* element = animal->FirstChildElement;

 // Прочитать элемент клички животного

 if (element && strcmp(element->Value, "name") == 0) {

// Первым дочерним элементом объекта animal является кличка (элемент

// name"); используйте ее текстовое значение для установки клички

Поделиться:
Популярные книги

Тайны затерянных звезд. Том 2

Лекс Эл
2. Тайны затерянных звезд
Фантастика:
боевая фантастика
космическая фантастика
космоопера
фэнтези
5.00
рейтинг книги
Тайны затерянных звезд. Том 2

Зайти и выйти

Суконкин Алексей
Проза:
военная проза
5.00
рейтинг книги
Зайти и выйти

Я еще не барон

Дрейк Сириус
1. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Я еще не барон

Всадник Системы

Poul ezh
2. Пехотинец Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Всадник Системы

Ученик

Губарев Алексей
1. Тай Фун
Фантастика:
фэнтези
5.00
рейтинг книги
Ученик

Тройняшки не по плану. Идеальный генофонд

Лесневская Вероника
Роковые подмены
Любовные романы:
современные любовные романы
6.80
рейтинг книги
Тройняшки не по плану. Идеальный генофонд

Восход черной звезды

Звездная Елена
4. Катриона
Фантастика:
фэнтези
6.25
рейтинг книги
Восход черной звезды

Идеальный мир для Лекаря 14

Сапфир Олег
14. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 14

Генерал-адмирал. Тетралогия

Злотников Роман Валерьевич
Генерал-адмирал
Фантастика:
альтернативная история
8.71
рейтинг книги
Генерал-адмирал. Тетралогия

Магия чистых душ 2

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.56
рейтинг книги
Магия чистых душ 2

Новый Рал 9

Северный Лис
9. Рал!
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Новый Рал 9

Идеальный мир для Лекаря 17

Сапфир Олег
17. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 17

Книга 4. Игра Кота

Прокофьев Роман Юрьевич
4. ОДИН ИЗ СЕМИ
Фантастика:
фэнтези
боевая фантастика
рпг
6.68
рейтинг книги
Книга 4. Игра Кота

В поисках Оюты

Лунёва Мария
Оюта
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
В поисках Оюты