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

Zadanie z funkcją zaprzyjaźnioną

VPS Starter Arubacloud
0 głosów
1,269 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,170 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ź 257 wizyt
+1 głos
0 odpowiedzi 2,967 wizyt
0 głosów
1 odpowiedź 385 wizyt

92,452 zapytań

141,262 odpowiedzi

319,079 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...