x-kom hosting

[C++]Konstruktory, destruktory, operatory - zadanie

Cinek1552
utworzono
utworzono (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
komentarz

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
komentarz

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
komentarz

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
komentarz

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.

Lucider
komentarz
komentarz

Umiesz programować?

Cinek1552
komentarz
komentarz

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
komentarz

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
komentarz

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
komentarz

@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
komentarz

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
komentarz

[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.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Strona wykorzystuje pliki cookies w celu prawidłowego świadczenia usług i wygody użytkowników. Warunki przechowywania i dostępu do plików cookies możesz zmienić w ustawieniach przeglądarki.