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

Wskaźnik 'this' (C++)

Cloud VPS
0 głosów
681 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 527 wizyt
pytanie zadane 25 czerwca 2018 w C i C++ przez Sic Dyskutant (8,510 p.)
0 głosów
2 odpowiedzi 1,349 wizyt
pytanie zadane 11 kwietnia 2018 w C i C++ przez antek782 Początkujący (490 p.)
+1 głos
3 odpowiedzi 446 wizyt
pytanie zadane 1 marca 2019 w C i C++ przez LubieNalesniki Użytkownik (610 p.)

93,469 zapytań

142,404 odpowiedzi

322,713 komentarzy

62,852 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

Kursy INF.02 i INF.03
...