Cinek1552 utworzono 4 stycznia 2010 utworzono 4 stycznia 2010 (edytowane) Nawiązując do mojego poprzedniego tematu, link zamieszczony poniżej, najwyraźniej moderator źle mnie zrozumiał. Nie jest to żadna praca domowa, na podstawie tego programu prosiłbym tylko o wytłumaczenie mi o co w tym chodzi, jeśli chcecie możecie napisać całkowicie inny program, ten nie jest mi potrzebny. [url="http://www.forumpc.pl/index.php?showtopic=142106&st=0&gopid=940510&#entry940510"]Link do poprzedniego tematu.[/url] Oto treść tego tematu. [quote]Witam wszystkich, prosiłbym Was bardzo o rozwiązanie pewnego zadania (treść poniżej) i wytłumaczenie o co w tym wszystkim chodzi. Zapewne ktoś napisze bym poszukał na google, znalazłem tego sporo, ale niestety nigdzie nie było na tyle wytłumaczone i w prosty sposób bym załapał co i jak, mowa o konstruktorach, destruktora i operatorach. Oto treść zadania: [quote]1. Zadeklaruj klasę oblicz z polami: a, b, c typu double. 2. Klasa oblicz powinna posiadać metody ustawiające i odczytujące wartości pól 3. Zadeklaruj operator ^ dwuargumentowy. Operator powinien działać symetrycznie: w1=l^w2, w1=w2^l gdzie l liczbą typu double, a w1 i w2 obiektami typu oblicz. Działanie operatora w obydwu przypadkach: w1.a=(l+w2.a)/2 w1.b=(l+w2.b)/2 w1.c=(l+w2.c)/2 4. Klasa oblicz powinna posiadać konstruktor domyślny który ustawia wartość pól na2, oraz konstruktor merytoryczny. Piąte już co innego, ale też wrzucam. 5. W komentarzu pod funkcją main napisz jak nazywa się definiowanie tego samego operatora z różnymi argumentami[/quote] Bardzo prosiłbym o zrobienie tego zadania i wytłumaczenie o co w tym chodzi bym był w stanie pojąć o co chodzi i zrobić coś podobnego samemu.[/quote]
rafalluz komentarz 4 stycznia 2010 komentarz 4 stycznia 2010 Ponownie, na ile słabym ogółem źródłem jest Wikipedia, masz tam wytłumaczone: http://pl.wikipedia.org/wiki/Konstruktor_%28programowanie_obiektowe%29 W punkcie "zwykły konstruktor" masz konstruktor merytoryczny Destruktor - nie widzę potrzeby, by go tu pisać Przeciążenie operatorów - czego właściwie nie rozumiesz?
Cinek1552 komentarz 4 stycznia 2010 Autor komentarz 4 stycznia 2010 Mowa dokładniej o punkcie 2 i 3, gdzie zawrzeć te wszystkie dane i w jaki sposób je tam umieścić? Najłatwiej właśnie byłoby mi to zrozumieć po zrobieniu programu, mając to przed oczami i wtedy bym pytał co i jak. Teraz nie wiem o co więcej pytać ponieważ nie wiem jak to wygląda poprawnie zrobione.
rafalluz komentarz 4 stycznia 2010 komentarz 4 stycznia 2010 2. W definicji klasy pola ustawiasz jako prywatne i tworzysz tzw. akcesory, czyli dwie metody, jedna przyjmuje nową wartość i ustawia pole, druga bezargumentowa, zwraca aktualną wartość. 3. Po prostu przeładuj operator^ , najlepiej też w definicji klasy.
Cinek1552 komentarz 4 stycznia 2010 Autor komentarz 4 stycznia 2010 rafalluz, a tak dokładniej? Właśnie temu napisałem, że lepiej by mi było na przykładzie, szybciej bym załapał mając to zobrazowane.
Cinek1552 komentarz 4 stycznia 2010 Autor komentarz 4 stycznia 2010 Umiem, ale mówię... Tego zbytnio nie pojmuję, co zawsze robiłem to co i rusz coś nie wychodziło, nie mam tego niestety, pen drive kumplowi pożyczyłem.
Lucider komentarz 4 stycznia 2010 komentarz 4 stycznia 2010 Więc temat zamykam i nie wyrzucam do kosza. Jak już będziesz miał kod źródłowy z tego co próbowałeś, ale Ci nie wychodziło to napisz mi PW, otworzę temat wrzucisz kod i dopiero będziemy rozmawiać.
Cinek1552 komentarz 5 stycznia 2010 Autor komentarz 5 stycznia 2010 Tu jest akurat konstruktor domyślny który ma ustawić te wartości pól równe 2. [code]#include <stdio.h> #include <iostream> using namespace std; class oblicz { public: double a,b,c; oblicz(double a, double b, double c) { a=b=c=2; } };[/code] Dobrze to mam? Jeszcze jest tam napisane, że ma znajdować się także konstruktor merytoryczny, ale gdzie? Jak je połączyć razem? No, merytoryczny to wychodzi na to, że ma wyglądać następująco. [code]#include <stdio.h> #include <iostream> using namespace std; class oblicz { public: oblicz(double a, double b, double c) { this->a = a lub 2?; this->b = b lub 2?; this->c = c lub 2?; } private: double a; double b; double c; };[/code] I tutaj już się gubię, nie mam pojęcia gdzie mam zamieścić te obliczenia z punktu 3, skąd bierze mi się to w1 i w2, jak poprawnie umieścić razem te dwa konstruktory, mowa o domyślnym i merytorycznym. Dobra, obliczenia te trzy na końcu w punkcie 3 będą w main, a co z poprzednimi? No i gdzie zamieścić w klasie to w1 i w2 i w jaki sposób później wywołać to w main.
rafalluz komentarz 5 stycznia 2010 komentarz 5 stycznia 2010 @Konstruktor domyślny: Nie przyjmuje żadnych argumentów. Bo po co, skoro i tak wszystko ustawiasz na 2? @Konstruktor merytoryczny: daj jaśniejsze nazwy parametrów konstruktora, np. nowe_a, nowe_b, nowe_c, to sam będziesz widział lepiej, o co chodzi. [quote]I tutaj już się gubię, nie mam pojęcia gdzie mam zamieścić te obliczenia z punktu 3, skąd bierze mi się to w1 i w2, jak poprawnie umieścić razem te dwa konstruktory, mowa o domyślnym i merytorycznym. Dobra, obliczenia te trzy na końcu w punkcie 3 będą w main, a co z poprzednimi? No i gdzie zamieścić w klasie to w1 i w2 i w jaki sposób później wywołać to w main.[/quote] Nie, one nie będą w main. Przeładowanie operatora robisz w definicji klasy, pod konstruktorami i akcesorami.
Cinek1552 komentarz 5 stycznia 2010 Autor komentarz 5 stycznia 2010 Czyli w jaki sposób ma to być połączone? Ten domyślny i merytoryczny? Po prostu mam umieścić to co wrzuciłem w merytorycznym? [quote]@Konstruktor merytoryczny: daj jaśniejsze nazwy parametrów konstruktora, np. nowe_a, nowe_b, nowe_c, to sam będziesz widział lepiej, o co chodzi.[/quote] Te "nowe" rozumiem, że mam umieścić w części "private"? W publicznej mam deklaracje tych zmiennych i ustawienie ich na 2 (tak ma być? Czy a=a itp?), więc po co mi jeszcze deklaracja w części prywatnej? [quote]Nie, one nie będą w main. Przeładowanie operatora robisz w definicji klasy, pod konstruktorami i akcesorami. [/quote] Mógłbym prosić o jakiś przykład? Jak już mówiłem, w tych konstruktorach itp. nie łapię o co chodzi więc trochę Cię pomęczę pytaniami.
rafalluz komentarz 5 stycznia 2010 komentarz 5 stycznia 2010 [quote]Czyli w jaki sposób ma to być połączone? Ten domyślny i merytoryczny? Po prostu mam umieścić to co wrzuciłem w merytorycznym?[/quote] To dwa osobne konstruktory. Nie mają robić tego samego przecież. [quote] Te "nowe" rozumiem, że mam umieścić w części "private"? W publicznej mam deklaracje tych zmiennych i ustawienie ich na 2 (tak ma być? Czy a=a itp?), więc po co mi jeszcze deklaracja w części prywatnej?[/quote] Nie. Te nowe - mam na myśli parametry konstruktora. Byś je jaśniej nazwał, to jaśniej będziesz miał, co ten konstruktor robi. Bo potem widzisz a=a i zgłupieć można, co pod co jest przypisywane. [quote]Mógłbym prosić o jakiś przykład? Jak już mówiłem, w tych konstruktorach itp. nie łapię o co chodzi więc trochę Cię pomęczę pytaniami. [/quote] W wikipedii masz przykład przeładowania operatora dla klasy Czas: http://en.wikipedia.org/wiki/Operator_overloading Angielska, owszem, ale kod jest.
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.