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

Dostęp do zmiennej klasy.

Object Storage Arubacloud
0 głosów
710 wizyt
pytanie zadane 14 stycznia 2020 w C i C++ przez kolijk Użytkownik (600 p.)

Witam. Mam taki kod 

#include <iostream>

class First {

public:

	int test() {

		return variable += 1;

	}

};

class Second {

public:

	First first;

	int variable;

};

int main() {

	Second second;
	

	std::cout <<second.first.test()<<std::endl;

	return 0;

}

Idzie w jakiś sposób uzyskać z klasy "First" dostęp do zmiennej "variable" z klasy "Second"?

komentarz 14 stycznia 2020 przez tkz Nałogowiec (42,000 p.)
Nie skompiluje się. Pokaż coś więcej.

3 odpowiedzi

+1 głos
odpowiedź 14 stycznia 2020 przez Michałełe Nałogowiec (25,600 p.)
Klasa First nie ma zmiennej o nazwie variable, tylko klasa Second ją ma. Dostęp możesz uzyskać np. wysyłając ją jako argument funkcji.
komentarz 14 stycznia 2020 przez kolijk Użytkownik (600 p.)
Tylko w taki sposób idzie?
komentarz 14 stycznia 2020 przez Michałełe Nałogowiec (25,600 p.)
Tak, jeśli chodzi Tobie dokładnie o tę zmienną variable z obiektu second to jedynie możesz dać to jako argument funkcji ( i przyjąć go przez referencję).
komentarz 14 stycznia 2020 przez Michałełe Nałogowiec (25,600 p.)
Referencję albo do obiektu, albo do int'a ( bo variable ma typ int).
0 głosów
odpowiedź 14 stycznia 2020 przez Ma3stro Nowicjusz (200 p.)
#include <iostream>

using namespace std;




class Second {

public:

    int variable;

};

class First {

public:

    int test(Second x) {

        return x.variable += 1;

    }

};


int main() {

    First first;
    Second second;

    cout<<first.test(second)<<endl;

    return 0;

}

Czy o to chodzi?
 

komentarz 15 stycznia 2020 przez kolijk Użytkownik (600 p.)
Mi zależy aby "First" był w "Second"
–2 głosów
odpowiedź 14 stycznia 2020 przez adam_jankowski Mądrala (5,970 p.)
Niech klasa First przyjaźni się z klasą second. W klasie second dodaj deklaracje:  friend class First;

Wtedy będzie działac
komentarz 14 stycznia 2020 przez tkz Nałogowiec (42,000 p.)
Ahhhh samo friend nie jest złym wzorcem, tak samo jak goto, To, że nie potrafisz tego użyć, nie oznacza, że wszyscy inni też tego potrafią. Jest to część języka, która jest tylko narzędziem.

Funkcje zaprzyjaźnienia nie różnią się od funkcji składowych pod względem enkapsulacji. Słowo kluczowe firend nie przerywa enkapsulacji z bardzo prostego powodu, że funkcja nie może być przyjacielem Twojej klasy bez Twojej klasy. Mogą one jednak oferować inne zalety, zwłaszcza jeżeli chodzi o szablony. Ponadto niektórych operatorów nie można określić jako "wolne", więc jeśli chcesz, aby miały dostęp do członków, musisz użyć friend. C++, to nie Java, czy Smalltalk...
komentarz 14 stycznia 2020 przez Ehlert Ekspert (212,790 p.)

Racja, o tym nie pomyślałem. Byłem ślepy. Zapewne dlatego, że masa szablonów klas i przeciążonych operatorów z kodu autora przysłoniła mi oczy cool

komentarz 14 stycznia 2020 przez tkz Nałogowiec (42,000 p.)

Bez względu na to uzyskiwanie dostępu w taki sposób to antypattern.

Wytłumaczyłem dlaczego nie. Oczywiście możesz to podważyć czymś więcej niż pustymi słowami i ironią. 

Dyskusja z niekompetentną osobą nie ma sensu i nie jest warta mojego czasu.

A to nadal bawi...

 

komentarz 15 stycznia 2020 przez Ma3stro Nowicjusz (200 p.)
No ale po co ma działać w taki sposób i uczyć się błędnego nawyku? Tak samo tyczy się z goto. Nikt tego nie używa bo jest to bez sensu więc nie można stwierdzić, że ktoś "dobrze używa goto". Jeżeli ktoś uważa, że można w świetny sposób wykorzystać goto i zaimplementować to do programu to jeszcze nie wyszedłeś z plików bat i obawiam się, że jego wiedza jest na poziomie Hello World.
komentarz 15 stycznia 2020 przez tkz Nałogowiec (42,000 p.)

Nie ma nic złego w goto jeżeli jest właściwie używane. Powodem, dla którego jest to „złe”, jest to, że pionierzy C (często wywodzący się ze środowiska asemblera) używali goto do tworzenia niezwykle trudnego do zrozumienia kodu. Przez większość czasu możesz żyć bez goto. Istnieje jednak kilka przypadków, w których goto mogą być przydatne. Użycie goto do wyskoczenia z głęboko zagnieżdżonej pętli może być często czystsze niż użycie zmiennej warunkowej i sprawdzenie jej na każdym poziomie. 

Powtarzanie utartych reguł jest pokazem nie zgłębienia tematu. Który Ma3stro właśnie pokazałeś.

Jeżeli ktoś uważa, że można w świetny sposób wykorzystać goto i zaimplementować to do programu to jeszcze nie wyszedłeś z plików bat i obawiam się, że jego wiedza jest na poziomie Hello World.

Zapraszam do Trójmiasta, powtórzysz osobom pracującym w embedded od przynajmniej 7 lat, że nie potrafią programować. 

uczyć się błędnego nawyku?

Dlaczego friend jest błędne? 

Podobne pytania

0 głosów
1 odpowiedź 594 wizyt
0 głosów
1 odpowiedź 116 wizyt
pytanie zadane 29 kwietnia 2020 w C i C++ przez amtrax Dyskutant (9,630 p.)
0 głosów
1 odpowiedź 141 wizyt
pytanie zadane 29 grudnia 2017 w Java przez Midgard Początkujący (390 p.)

92,624 zapytań

141,482 odpowiedzi

319,822 komentarzy

62,005 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!

...