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

Adresy obiektów klasy (C++)

Object Storage Arubacloud
0 głosów
455 wizyt
pytanie zadane 27 maja 2018 w C i C++ przez Sic Dyskutant (8,510 p.)

Witam wykorzystując program, który wcześniej stworzyłem chciałem sprawdzić jak działa przy użyciu tablic obiektów tym samym sprawdzałem ich adresy (program działa w pełni sprawnie).

#ifndef P_H_      
#define P_H_      

#include <string> 
class Marka       
{                 
        private:  
                std::string nazwa;   
                double kwota;        
        public:   
//gdy nazwy argumentow metod sa takie same jak skladowe nalezy uzyc wskaznika "this"
                Marka(const std::string & nazwa, double kwota);
                Marka(double kwota);
                Marka(const std::string & nazwa);  
                ~Marka();
};
#endif
#include "p.h"    
#include <iostream>                  
#include <math.h> 
//aby referencja mogłać poprawnie musi być 'const                         
Marka::Marka(const std::string & nazwa, double kwota) {this->nazwa = nazwa; this->kwota = kwota; std::cout << "Podaj nazwe auta: " << nazwa << "\tAdres:nazwy: " << &nazwa << "\nPodaj kwote: " << kwota << "\tAdres kwota: " << &kwota << "\n"; }
//potegowanie liczby przeciażenie nazwy konstuktora                        
Marka::Marka(double kwota) { this->kwota=kwota; std::cout << kwota *pow(2,4) << "\tAdres kwota: " << &kwota << "\n"; }
//wyswietenie tekstu                 
Marka::Marka(const std::string & nazwa) { this->nazwa=nazwa; std::cout << nazwa << "\tAdres nazwa: " << &nazwa << "\n\n"; }
//wywołanie destruktora
Marka::~Marka() { std::cout << "Zakończenie pracy obiektu !!!\n"; std::cout << &this->nazwa << "\n" << &this->kwota << "\n"; } 

int main()
{
        const int l_elementow = 3;
        Marka tab_obk[l_elementow] {
                Marka("Mercedes", 215.000),
                Marka(36.333),
                Marka("Hack") };
        return 0;

}

Wyświetlenie programu. Pytanie odnosi się do wywołania konstruktorów dlaczego adresy są umieszczone tak daleko od wywołanych obiektów?

Czy chodzi o to że pokazane adresy odnoszą się do składowych klasy?

Podaj nazwe auta: Mercedes      Adres:nazwy: 0x7ffd992f17d0
Podaj kwote: 215        Adres kwota: 0x7ffd992f1778
581.328 Adres kwota: 0x7ffd992f1780
Hack    Adres nazwa: 0x7ffd992f17d0

Zakończenie pracy obiektu !!!
0x7ffd992f1840
0x7ffd992f1860
Zakończenie pracy obiektu !!!
0x7ffd992f1818
0x7ffd992f1838
Zakończenie pracy obiektu !!!
0x7ffd992f17f0
0x7ffd992f1810

 

1 odpowiedź

+2 głosów
odpowiedź 27 maja 2018 przez criss Mędrzec (172,590 p.)
wybrane 27 maja 2018 przez Sic
 
Najlepsza
Naucz się lepiej formułować pytania, bo mogę się tylko domyślać o co ci chodzi. Dziwi cię, że adresy wyprintowane przez konstruktor są inne niż te wyprintowane przez destruktor? W konstruktorze wyświetlasz adresy argumentów konstruktora, a w destruktorze wyświetlasz adresy składowych klasy.

"gdy nazwy argumentow metod sa takie same jak skladowe nalezy uzyc wskaznika "this"" - sam tak sobie napisałes w komentarzu
komentarz 27 maja 2018 przez Sebastian Fojcik Nałogowiec (43,020 p.)

Reasumując, adresy skladowych klasy powinno się wypisywać tak: 

&( this->kwota) 

Bo w funkcji, w której używasz &kwota, nazwa tej zmiennej jest przesłonięta przez lokalny parametr tej funkcji (ma tą samą nazwę co składnik klasy, ale to inna zmienna z innym adresem)

komentarz 27 maja 2018 przez Sic Dyskutant (8,510 p.)
Dziękuję teraz się zgadza. Zrobiłem to wcześniej tylko bez nawiasów.

Podobne pytania

0 głosów
3 odpowiedzi 1,343 wizyt
pytanie zadane 17 maja 2018 w C i C++ przez giedymin33 Początkujący (290 p.)
0 głosów
1 odpowiedź 452 wizyt
0 głosów
1 odpowiedź 187 wizyt
pytanie zadane 11 grudnia 2019 w C i C++ przez Jacuchna0 Użytkownik (640 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

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

...