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

Zadanie z funkcją zaprzyjaźnioną

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
994 wizyt
pytanie zadane 8 lutego 2018 w C i C++ przez Leon307 Początkujący (270 p.)

Witam wszystkich!

Niedawno zaczęliśmy w szkole programowanie obiektowe w C++. Staram się ogarniać ewentualne braki przy pomocy filmów Pana Mirosława, jednak przerastają mnie funkcje zaprzyjaźnione.

Mam tu chyba dość proste zadanie, które gdyby wyciąć z niego element z funkcją zaprzyjaźnioną uruchamia się bez problemu. Nie mam niestety zielonego pojęcia jak ową funkcję poprawnie napisać, prosiłbym więc o jakieś wyjaśnienie lub poprawienie tego elementu programu :)

Oto treść zadania:

"Napisz program obliczający objętość prostopadłościanu (klasa Prostopadloscian o polach a,b,h) - funkcja zaprzyjaźniona liczy powierzchnię."

a oto mój kod:

#include <iostream>
#include <cstdlib>

using namespace std;


class Prostopadloscian
{
			public:
				
			int a;
			int b;
			int h;	
			int wyniko;
			int wynikp;
		

	void dodaj_figure()
		{
			cout<<"Dodawanie nowej figury."<<endl;
			cout<<"Podaj dlugosc: "<<endl;
			cin>>a;
			cout<<"Podaj szerokosc: "<<endl;
			cin>>b;
			cout<<"Podaj wysokosc: "<<endl;
			cin>>h;
		}
	void objetosc()
		{
			wyniko=a*b*h;
			cout<<"Objetosc: ";
			cout<<wyniko<<endl;	
		}

	friend void powierzchnia();	
};
void powierzchnia(int wynikp, int a, int b, int h)
	{
		wynikp=(a*b*2)+(a*h*2)+(b*h*2);
		cout<<"Powierzchnia: ";
		cout<<wynikp;
	}
	
int main()
{
	Prostopadloscian p1;
	p1.dodaj_figure();
	p1.objetosc();
	p1.powierzchnia(int wynikp, int a, int b, int h);
	
	
	return 0;
}

Z góry dziękuję za pomoc :)

2 odpowiedzi

0 głosów
odpowiedź 8 lutego 2018 przez chucksqll Stary wyjadacz (12,930 p.)

Zacząłbym od zmiany

friend void powierzchnia();

Na

friend void powierzchnia(prostopadloscian & p);

To powinno Ci pomóc.

komentarz 8 lutego 2018 przez Leon307 Początkujący (270 p.)
Co oznacza użycie spójnika "&"? i dlaczego "p" a nie "p1"?
komentarz 8 lutego 2018 przez chucksqll Stary wyjadacz (12,930 p.)

Znak & w tym przypadku oznacza referencję. Czyli zamiast pracować na kopii, pracujesz na oryginale.

(więcej o tym tutaj : http://cpp0x.pl/kursy/Kurs-C++/Poziom-3/Przekazywanie-argumentow-funkcji-przez-referencje/356)

Co do tego drugiego to równie dobrze można by to nazwać  "Mario", jest to tylko nazwa jaką sobie ustalisz.

 

0 głosów
odpowiedź 8 lutego 2018 przez Patryk Krajewski Nałogowiec (26,180 p.)
Po pierwsze to przy wywołaniu nie dopisuję się typu więc powinieneś wywalić te inty z linijki: "p1.powierzchnia(int wynikp, int a, int b, int h);" Ale ogólnie ten kod nie zadziała. Źle zrozumiałeś działanie funkcji zaprzyjaźnionych. Je używasz, gdy chcesz, żeby dana funkcja z zewnątrz klasy miała dostęp do chronionych i prywatnych pól klasy. I potem jak już chcesz użyć tej funkcji to normalnie ją wywołujesz, a nie jaką metoda klasy z którą jest zaprzyjaźniona. Ja bym ci radził wysyłać do tej funkcji obiekt klasy Powierzchnia, a nie wszystkie dane pokolei.

Podobne pytania

0 głosów
1 odpowiedź 142 wizyt
+1 głos
0 odpowiedzi 2,576 wizyt
0 głosów
1 odpowiedź 252 wizyt

89,728 zapytań

138,332 odpowiedzi

309,340 komentarzy

59,649 pasjonatów

Advent of Code 2022

Top 15 użytkowników

  1. 429p. - Argeento
  2. 427p. - nidomika
  3. 396p. - Mikbac
  4. 392p. - ssynowiec
  5. 390p. - Łukasz Eckert
  6. 387p. - TheLukaszNs
  7. 386p. - rucin93
  8. 382p. - Michal Drewniak
  9. 382p. - Marcin Harasimowicz
  10. 378p. - JMazurkiewicz
  11. 373p. - tokox
  12. 362p. - adrian17
  13. 359p. - overcq
  14. 350p. - Mawrok
  15. 345p. - Vinox
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...