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

Różnica między :: a . .

Object Storage Arubacloud
0 głosów
176 wizyt
pytanie zadane 25 stycznia 2017 w C i C++ przez maydan Nowicjusz (150 p.)
Witam,

zacząłem bawić się w QT Creatorze, i chciałbym dowiedzieć się czego czasem używam "::" a czasem "." .

Na przykład: QString::number(x);
Tutaj odwołuję się do metody "number" w klasie "QString", a dlaczego używam "::"?

A w "text().toFloat()" "text()" jest obiektem, a "toFloat()" jest metodą czy funkcją?
Jeżeli jest metodą, to dlaczego odwołuje się "." a nie "::"?

1 odpowiedź

+4 głosów
odpowiedź 25 stycznia 2017 przez Damian11131 Stary wyjadacz (13,490 p.)
wybrane 25 stycznia 2017 przez maydan
 
Najlepsza

Jeśli odwołujesz się do metody statycznej (czyli takiej powiązanej z klasą, a nie z jej obiektem) to używasz ::, na przykład QString::number(x) oznacza statyczną metodą number, którą wywołujemy z wnętrza klasy QString podając jej jakiś tam argument. Natomiast używając kropki odwołujesz się do metody pracującej na rzecz konkretnego obiektu, text jest metodą wywoływaną na rzecz obiektu (klasy QTextEdit bodajże), a następnie metoda toFloat jest wywoływana na rzecz obiektu zwróconego przez uprzednio wywołaną metodę text.

3
komentarz 25 stycznia 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Warto jeszcze dodać, że z :: korzystamy odwołując się do danego elementu danej przestrzeni nazw, jak choćby std::string (w tym przypadku do klasy string znajdującej się wewnątrz przestrzeni nazw std).

komentarz 25 stycznia 2017 przez maydan Nowicjusz (150 p.)
edycja 25 stycznia 2017 przez maydan

W przypadku:

a = ui -> wart1 ->text().toFloat();

Gdzie wart1 jest nazwą okna, z którego pobieram wartość, a "a" zmienną na której chcę pracować, to co dokładnie jest obiektem? 

@EDIT:
wart1 jest obiektem QObject, czyli ui jest wskaźnikiem na obiekt wart1, na który działają metody text().toFloat().
Dobrze zrozumiałem?

1
komentarz 25 stycznia 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Operator -> odwołuje się do pola obiektu jakiejś struktury/klasy, na którą wskazuje dany wskaźnik.

Czyli ui to wskaźnik na obiekt klasy, wart1 podobnie. Natomiast text() to metoda, która zwraca obiekt jakiejś klasy, a toFloat() jest jedną z metod właśnie tej klasy, której obiekt jest zwracany przez metodę text().

Jeżeli mnie zrozumiałeś to gratuluję :D

komentarz 25 stycznia 2017 przez maydan Nowicjusz (150 p.)

Czyli tak:
Skoro text() zwraca obiekt jakiejś klasy i toFloat() do tej klasy należy, to text() oraz toFloat() należą do tej samej klasy. Metoda toFloat() działa na obiekcie zwróconym przez metodę text().

Dobrze to zrozumiałem?

1
komentarz 25 stycznia 2017 przez Eryk Andrzejewski Mędrzec (164,260 p.)

Trochę nie tak, ale to moja wina. Niepotrzebnie wszystko zagmatwałem. Spróbuję Ci to wytłumaczyć.

Chodzi o to, że text() i toFloat() niekoniecznie należą do tej samej klasy.

Napiszę przykładowy kod

#include <iostream>
#include <string>

class MyClass
{
public:
    MyClass(std::string string)
    {
        myString = string;
     }
    ~MyClass()
    {
    }
    
    std::string getMyString()
    {
        return myString;
    }

private:
    std::string myString;
};

int main()
{
    MyClass myObject("Ala ma kota i psa");
    std::string myNewString = myObject.getMyString().substr(0, 11);

    std::cout << myNewString;
}

Ten kod jest też troszkę zagmatwany (i brzydki i nieprzemyślany pod wieloma względami - ale to miał być tylko przykład, zresztą pisany na szybko i nawet nie testowany), ale chciałem Ci po prostu pokazać podobną sytuację.

Na obiekcie myObject wywołuję metodę getMyString(). Metoda ta zwraca obiekt typu std::string. Klasa std::string zawiera metodę substr(), która pozwala "wychwycić" fragment tekstu (ale to już nieistotne). Chodzi po prostu o to, że niekoniecznie obie metody należą do tej samej klasy.

Teraz już rozumiesz, czy mam jeszcze wytłumaczyć?

komentarz 25 stycznia 2017 przez maydan Nowicjusz (150 p.)
edycja 25 stycznia 2017 przez maydan
Kod* działa, pobawiłem się nim chwilę i załapałem, dzięki wielkie. :)

Podobne pytania

0 głosów
0 odpowiedzi 167 wizyt
+1 głos
3 odpowiedzi 858 wizyt
0 głosów
2 odpowiedzi 124 wizyt
pytanie zadane 7 stycznia 2021 w C i C++ przez AnimPony Początkujący (440 p.)

92,572 zapytań

141,422 odpowiedzi

319,643 komentarzy

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

...