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

Przekazywanie obiektu klasy do metody innej klasy.

Object Storage Arubacloud
0 głosów
1,868 wizyt
pytanie zadane 18 października 2016 w C i C++ przez sh1nen Obywatel (1,570 p.)
edycja 18 października 2016 przez sh1nen

Jako raczkujący adept obj. c++, wychodzę z takim zapytaniem

mam dwie klasy:

Adres.h

class Address {

    std::string street;
    std::string apt;

public:
    Address(std::string s, std::string a);
    void showAddress() const;
    void setStreet(std::string s);
    void setApt(std::string a);
    virtual ~Address();
};

oraz Student.h

class Student {

    std::string name;
    std::string surname;
    const std::string PESEL;
    Address *residentialAddress;
    Address *permanentAddress;

public:
    Student();
    Student(std::string n, std::string s, std::string p);
    void showInfo() const;
    void setResidentialAddress(Address & rA);
    void setPermanentAddress(Address & pA);
    virtual ~Student();

};

w main.cpp

    Address address("Morawskiego", "16");

    Student* nobody = new Student();
    nobody->setPermanentAddress(&address);
    cout<<nobody->showInfo()<< endl;

 

Chciałbym wywołując metodę setPermanentAddress do której przekazuję obiekt address przez referencję, ustawić  wartości pól permanentAddress na zgodne z wartościami pól obiektu address . Natomiast nie za bardzo wiem jak tego dokonać. Napisałem taką metodę w klasie Student, natomiast jak szybko się okazało, daleko na tym nie zajechałem.

void Student::setPermanentAddress(Address & rA) {

    permanentAddress->setApt(rA.apt);
    permanentAddress->setStreet(rA.street);
}

 

Będę wdzięczny za wszelką pomoc w tym problemie, gdyż nie mogę doszukać się błędu. Pozdrawiam

 

komentarz 18 października 2016 przez Szahid Pasjonat (20,930 p.)
Dostrzegam małą sprzeczność w tym co piszesz. "Chciałbym wywołując metodę setPermanentAddress do której przekazuję obiekt address przez referencję, ustawić wartości pól permanentAddress na zgodne z wartościami pól obiektu address . " Atrybuty które chcesz ustawić to wskaźniki na obiekty typu Adress a Atrybuty w klasie są typu string. Co chcesz jak ustawić? Co ma mieć jaką wartość
komentarz 18 października 2016 przez Szahid Pasjonat (20,930 p.)
Dostrzegam małą sprzeczność w tym co piszesz. Atrybuty które chcesz ustawić to wskaźniki na obiekty typu Adress a Atrybuty w klasie są typu string. Co chcesz jak ustawić? Co ma mieć jaką wartość

2 odpowiedzi

0 głosów
odpowiedź 18 października 2016 przez obl Maniak (51,280 p.)

Nie napisałeś, czy się kompiluje, jeżeli nie to jaki błąd wywala. Jeżeli się kompiluje to czy po się program wywala, czy może niepoprawnie działa i jeżeli to drugie to jakie są tego objawy. Z kodu nie wiele wynika, tylko mogę się domyślać, że pewnie pamięci nie przypisałeś (tylko zgaduję) do wskaźnika permanentAddress i pewnie ci błąd wyskakuje po uruchomieniu programu bo próbujesz odwołać się do pamięci, która nie została przydzielona.

Edit:

Podaj kod konstruktora klasy Student

0 głosów
odpowiedź 18 października 2016 przez Szahid Pasjonat (20,930 p.)

Pszczyna dlaczego nie działa: 

Tworzysz dwa wskaźniki na typ Adress ( atrybuty klasy student). Są to wskaźniki puste.

 

Neleżyy najpierw stworzyć obiekty na których będziesz działał a potem ustawić na nie wskaźniki i działać. 

void Student::setPermanentAddress(Address & rA) 
{
   permanentAddress=&rA
   
    
}

Takie coś powinno zadziałać ale moim zdaniem można to zrobić lepiej

komentarz 18 października 2016 przez obl Maniak (51,280 p.)
Lepiej pamięć przydzielić i skopiować wartości.
komentarz 18 października 2016 przez Szahid Pasjonat (20,930 p.)
Jeżeli masz na myśli dynamiczne utworzenie obiektu w funkcji i ustawienie wskaźnika na ten obiekt to właśnie o to mi chodziło kiedy pisałem że można to zrobić lepiej ale w sumie widzimy za mało kodu żeby to stwierdzić i autor napewno wybierze rozwiązanie które mu bardziej odpowiada

Podobne pytania

0 głosów
1 odpowiedź 258 wizyt
pytanie zadane 13 października 2016 w C i C++ przez MiO Obywatel (1,310 p.)
0 głosów
1 odpowiedź 1,057 wizyt
0 głosów
0 odpowiedzi 1,048 wizyt
pytanie zadane 31 lipca 2016 w C i C++ przez Pac Plus Mądrala (5,560 p.)

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 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!

...