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