Читайте также:
|
|
Розробити веб-додаток для складання словника з урахуванням експертної оцінки.
Словник повинен знаходити та перекладати слова на декілька мов а саме:
Англійску;
Німецьку;
Французьку;
Українську;
Російську.
Аналіз перетворення
Будь конструктор, який може бути викликаний з рівно одним аргументом, визначає перетворення типу аргументу в тип класу. Для прикладу подивіться на наступні прототипи конструкторів для класу Star:
Star (const char *);
// преобразует char * в Star Star (const Spectral &, int memЬers = 1);
// преобразует Spectral в Star
Конструктори перетворення використовуються, скажімо, коли преутворений тип передається функції, яка була визначена як приймаюча клас в якості аргументу. Наприклад, розглянемо наступне:
Star north; north = "polari s ";
Другий оператор активізує функцію Star:: ope rator = (const Star &), використовуе Star:: Star (const char *) для створення об'єкту Star, який буде при замінений в якості аргументу для функції операції присвоювання. При цьому передбачається, що ви не визначали операцію пріспаіванія (char *) для Star.
Включення вираження expl icit в прототип для одноаргументного конструктора блокує неявне перетворення, однак допускає явні:
class Star
….
public:
explicit Star (const char *);
….
);
Star north;
north = "polaris"; // не допускается
north = Star (" polaris "); // допускается
Для перетворення об'єкта класу в якийсь інший тип визначається функція перетворення. Функція перетворення - це метод класу без аргумента або з оголошеним повертаним типом; ім'я цієї функції збігається з типом, в який потрібно перетворити. Незважаючи на відсутність оголошеного з
повертаемого типу, функція повинна повертати необхідну перетворене значення.
Ось кілька прикладів:
Star:: Star douЬl e () {...) // преобразует star в douЬle
Star:: Star const char * () {...) // преобразует char в const
Ви повинні проявляти розсудливість щодо таких функцій, застосовуючи їх тільки в тих випадках, коли вони дійсно корисні. Також в деяких разработ як класів наявність функцій перетворення збільшує ймовірність написання неоднозначного коду. Наприклад, припустимо, що визначаєте перетворення douЬle для типу vector за допомогою наступного коду:
vector ius (6.0, 0.0);
vector lux = ius + 2 0.2; // не визначений
Компілятор може перетворити ius в double і застосувати додавання double, або перетворити 2 0.2 в vector (використовуючи один із конструкторів) і застосувати додавання vector. Насправді він нічого не зробить і проінформує вас про неоднозначну конструкцію.
Дата добавления: 2015-07-11; просмотров: 62 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Концептуальна модель бази данних | | | Вимоги до системи в класах |