• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zwracanie referencji do obiektu string zawieranego w klasie

Object Storage Arubacloud
0 głosów
123 wizyt
pytanie zadane 21 kwietnia 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)

Cześć, 

mam klasę :

#ifndef CLASS_H_INCLUDED
#define CLASS_H_INCLUDED
 #include <valarray>
 typedef std::valarray<int> ArrayInt;

class Wine
{
private:
    std::string label;
    ArrayInt Pair; 
    ArrayInt Bottles; 
public:
    Wine (const char * l , int y, const int yr[],const int bot[]):Pair(yr,y),Bottles(bot,y),label(l){}
    Wine (const char * l, int y):Pair(y),Bottles(y),label(l){}
    GetBottles();
    std::string & Label();
    sum();


};

#endif // CLASS_H_INCLUDED

W metodzie Label(), potrzebuje zwrocić referencję do obiektu string 'label'. Niestety po zapisaniu metody w takim sposób, program nie chce działać. 

std::string & Wine::Label()
{
    return label;
}

Jak mogę rozwiązać problem? 

Pozdrowienia 

komentarz 21 kwietnia 2020 przez tkz Nałogowiec (42,000 p.)
Jeżeli string będzie dłuższy niż ileś tam znaków, zależnie do platformy, to nie zadziała ze względu na short string optimization.

Odchodząc od tematu błędów wynikających z implementacji strigna. Co znaczy "nie działa"?
komentarz 21 kwietnia 2020 przez amtrax Dyskutant (9,630 p.)
Napis do testów był krótki 4-5 znaków.

Program pokazuje, że składowa jest prywatna.
Jak mogę ją zwrócić?
komentarz 21 kwietnia 2020 przez tkz Nałogowiec (42,000 p.)
#include <iostream>
#include <string>
class Wine
{
private:
    std::string label;

public:
    explicit Wine(const std::string& label):label{label}{};
    const std::string & Label() const
    {
        return label;
    }
};

int main()
{
    std::string text("ala");
    Wine wine(text);
    std::cout<<wine.Label();
}

Nieco uprościłem kod na potrzeby pokazania. 

komentarz 21 kwietnia 2020 przez j23 Mędrzec (194,920 p.)

@tkz, a co ma short string optimization do zwracania przez referencję?

komentarz 21 kwietnia 2020 przez tkz Nałogowiec (42,000 p.)
#include <iostream>
#include <string>

class Test {
public:
  Test(const std::string& _text) : text(_text) {}
  const std::string& getText()  {
    return text;
  }

private:
  std::string text;
};

int main() 
{  
    {   
        const std::string text = "0932450usdijhfs";
        const std::string password = "password";
        const auto& savedText = Test(text).getText();
        std::cout << savedText << "\n";
    }
    {   
        const std::string text = "0932450usdijhf423423423s";
        const std::string password = "password";
        const auto& savedText = Test(text).getText();
        std::cout << savedText << "\n";
    }
}

Myślałem o takim przykładzie. 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 158 wizyt
0 głosów
4 odpowiedzi 404 wizyt
pytanie zadane 29 grudnia 2016 w C i C++ przez Adrian Stasiak Początkujący (410 p.)
0 głosów
1 odpowiedź 514 wizyt
pytanie zadane 9 maja 2017 w C# przez BlackMoon Obywatel (1,730 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...