return w konstuktorze i w funkji - pytania

0

Witam
mam dwa pytania.

Czy w konstruktorze można dać return w kodzie poniżej ?

class A
{
public :
    A(B *wsk)
    {
        if (wsk == null)
            return -1;
        else
        {
            //....
        }
    }
    ~A(){ delete wsk; }
private :
    A(){}
};

drugie pytanie

Co zwrócić w kodzie poniżej ? jeśli funkcja musi coś zwrócić ale index do vectora został źle podany i tak na prawdę nie powinna niczego zwrócić ? czy może zamiast ifa powinno być try-catch ?

class klasa
{
vector<jakis_typ_danych> vector;
jakis_typ_danych funkcja(int index)
{
if ((vector.empty()) && (index > vector.size()))
return // ???
return vector[i];
}
};

0

Konstruktor konstruuje obiekt, a nie zwraca jakąś wartość.
Możesz rzucić wyjątkiem, możesz nic nie robić (czyli dopuścić NULL, a potem sypać błędami w innych metodach przy użyciu takiego obiektu), możesz spróbować przerobić wskaźnik na referencję, uniemożliwiając tym samym podanie NULL.

drugie pytanie
Możesz rzucić wyjątkiem (throw) możesz zwrócić NULL (jeśli typ jest wskaźnikowy), możesz zwrócić jakiś obiekt zerowy (utworzony konstruktorem domyślnym), …
Od ciebie zależy, i od tego co to ma robić.

0

Dzięki tyle mi wystarczy.

Co do 2 przykładu to obiektem jest QPoint czyli krótko mówiąc dwa inty...zwracanie np. 0,0 czy -1,-1 to moim zdaniem to trochę złe rozwiązanie...a i samego NULL z tego co wiem nie da się zwrócić.

0

W tym wypadku najlepiej, najbezpieczniej rzucić po prostu wyjątek. Bo dla takiego typu jak QPoint, ciężko znaleźć, wymyślić poprawny obiekt "zerowy". Chyba że funkcja miałaby zwrócić wskaźnik na dany QPoint, to wtedy NULL i masz z głowy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1