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

Wskaźnik 'this' (C++)

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

Witam

Napisałem pewniem program, który był dla mnie ćwiczeniem nauki kontruktorów i destruktorów działa całkowicie tak jakbym tego chciał. W kodzie poniżej zostały uwzględnione wskaźniki this

#include "p.h"
#include <iostream>
#include <math.h>
//aby referencja mogłać poprawnie musi być 'const' 
Marka::Marka(const std::string & corp, double liczba) {this->nazwa = corp; this->kwota = liczba;
        std::cout << "Podaj nazwe auta: " << nazwa << " Podaj kwote: " << kwota << "\n"; }
//potegowanie liczby przeciażenie nazwy konstuktora 
Marka::Marka(double liczba) { this->kwota=liczba; std::cout << kwota *pow(2,4) << "\n"; }
//wyswietenie tekstu 
Marka::Marka(const std::string & corp) { this->nazwa=corp; std::cout << nazwa << "\n\n"; }
Marka::~Marka() { std::cout << "Zakończenie pracy obiektu !!!\n"; }
int main()
{
        Marka samochodu("Bentley", 1333.22);
        Marka podatek = Marka(235.12);
        Marka * asap_nigga = new Marka("Like a Boss"); // przydzial dynamiczny
        delete asap_nigga; //nie użycie delete powoduje, że obiekt dalej istnieje po zakończeniu programu
        return 0;
}

W poniższym już nie :

#include "p.h"
#include <iostream>
#include <math.h>
//aby referencja mogłać poprawnie musi być 'const' 
Marka::Marka(const std::string & corp, double liczba) {nazwa = corp; kwota = liczba;
        std::cout << "Podaj nazwe auta: " << nazwa << " Podaj kwote: " << kwota << "\n"; }
//potegowanie liczby przeciażenie nazwy konstuktora 
Marka::Marka(double liczba) { kwota=liczba; std::cout << kwota *pow(2,4) << "\n"; }
//wyswietenie tekstu 
Marka::Marka(const std::string & corp) { nazwa=corp; std::cout << nazwa << "\n\n"; }
Marka::~Marka() { std::cout << "Zakończenie pracy obiektu !!!\n"; }
int main()
{
        Marka samochodu("Bentley", 1333.22);
        Marka podatek = Marka(235.12);
        Marka * asap_nigga = new Marka("Like a Boss"); // przydzial dynamiczny
        delete asap_nigga; //nie użycie delete powoduje, że obiekt dalej istnieje po zakończeniu programu
        return 0;
}

Problem albo "nie problem" polega na tym, że w przypadku użycia jak i nie kompilator i tak odwołuję się poprawnie do składowych klasy.

Tak więc jaki sens jest ich używania (Ogólnie !) ??

1 odpowiedź

+1 głos
odpowiedź 26 maja 2018 przez Aisekai Nałogowiec (42,190 p.)
wybrane 26 maja 2018 przez Sic
 
Najlepsza
(W twoim przypadku) Problem, może pojawić się w sytuacji gdy jako parametr metody (konstruktora, settera itp) podasz zmienną, o tej samej nazwie, co nazwa pola wewnątrz klasy, a jest to popularna konwencja by parametry (np konstruktora) nazywać jak pola danej klasy.
komentarz 26 maja 2018 przez Sic Dyskutant (8,510 p.)
czyli jeżeli argumenty metody nazwałbym tak jak składowe to wtedy this spełniałbym swoją role?
komentarz 26 maja 2018 przez Aisekai Nałogowiec (42,190 p.)
Tak. Jeżeli miałbyś pole nazwane foo i w metodzie wewnątrz klasy miałbyś parametr foo, to np instrukcja:

foo=foo;

Nie dałaby Ci zamierzonego efektu przypisania parametru foo do pola foo. Użycie wskaźnika this-> przypisze do pola foo parametr foo.
komentarz 26 maja 2018 przez Sic Dyskutant (8,510 p.)
Dzięki sprawdziłem to na tym programi i kompilator pokazuję błąd.

Podobne pytania

0 głosów
2 odpowiedzi 259 wizyt
pytanie zadane 25 czerwca 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
2 odpowiedzi 1,097 wizyt
pytanie zadane 11 kwietnia 2018 w C i C++ przez antek782 Początkujący (490 p.)
+1 głos
3 odpowiedzi 353 wizyt
pytanie zadane 1 marca 2019 w C i C++ przez LubieNalesniki Użytkownik (610 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

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

...