Loading...
Jovanna avatar Jovanna 186 Точки

алгоритмичен въпрос, C++ Advanced, Task07_01 - Register - метод с винаги ретърнваща стойност как да се напише в случая

Здравейте,

какъв е начинът да се разпише кода с винаги ретърнваща стойност, и, да не връща "нулева"/дифолтна за обекта когато няма изпълнено условие? 

(хем да не гърми 6-ти тест в Judge, хем VS koмпилаторът да е доволен че методът винаги има ретърнваща стойност )

Company Register::get(int companyId) const {    
    for (size_t i = 0; i < this->numAdded; i++) {       
        if ( companiesArray[i].getId() == companyId) {
            return companiesArray[i];
        }
    }
    //return  ?;
}

Поздрави!

Тагове:
0
C++ Programming
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Здравей,

Няма такова нещо, което търсиш, освен може би ползване на exception-и. Принципно ако един метод не връща стойност, а трябва, това ти дава недефинирано поведение - само на Visual Studio компилаторът ще ти даде грешка за тези неща, други компилатори ще го компилират и стойността, която ще получиш е недефинирана.

На тази задача виннаги има верен резултат при търсенето, тоест и return Company(); да напишеш накрая трябва да е ок - този ред не би следвало да се изпълни, при входните данни за задачата. Ако имаш грешка там, значи нещо друго не е наред.

Поздрави,

Жоро

1
MartinBG avatar MartinBG 4803 Точки

Тези ситуации би трябвало да са покрити от заданието/спецификацията.

В слуая този детайл липсва, така че остава на теб да прецениш как да подходиш.

Вариантите за този конкретен случай не са много - връщаш nullptr, throw-ваш exception, или не правиш нищо (ако не те дразнят грешките на компилатора). Може би най-корекен е вариантът с връщането на nullptr, сига да може да си гаранираш, че всеки, който ползва този метод ще се съобразява с това.

1
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

В случая методът връща Company обект, така че nullptr не е вариант. Може би най-правилно от семантична гледна точка е хвърляне на exception - методът не може да си свърши по смислен начин работата, и няма дефиниран специален "празен" обект който да върне, така че остава exception. Това си има performance недостатък, но при така зададен метод е по-добре да е коректно семантично, отколкото да е бързо (но пък exception-и не сме учили)

2
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.