Klasa reprezentująca wektor...

2012-07-11 19:55

Rejestracja: 8 lat temu

Ostatnio: 6 lat temu

0

... a dokładnie wektor liczb całkowitych.

Jakbyście to rozumieli? Czy liczby mają być polami klasy?
Do zarządzania pamięcią mam użyć operatorów 'new' i 'delete'.

Pozostało 580 znaków

2012-07-11 20:01

Rejestracja: 12 lat temu

Ostatnio: 7 lat temu

1

pomijając fakt, że już jest std::vector, to pisząc coś takiego raczej w jednym polu trzymałbym tablicę liczb, a w drugim ilość elementów. do tego dodał bym jakieś metody implementujące działania na wektorze


#define if(x) if(rand()%6 && (x)) u mad? !user image

Pozostało 580 znaków

2012-07-12 17:49

Rejestracja: 8 lat temu

Ostatnio: 6 lat temu

0

Udało mi się stworzyć coś takiego;

class Wektor{
private:

int w1[5];                   //pola klasy
int w2[20];

w1.add(5678);         //metody klasy
int aa=w1.get(0);
int  s=w1.size();

};

Powinienem jeszcze napisać coś do zarządzania pamięcią.
Prosiłbym o podpowiedź.

Co to jest? O_o - maszynaz 2012-07-12 18:51

Pozostało 580 znaków

2012-07-13 23:29

Rejestracja: 8 lat temu

Ostatnio: 6 lat temu

0

Pytasz o powyższy kod? Jest to deklaracja klasy.
Przepraszam, jeśli kogoś obraziłem...

Pozostało 580 znaków

2012-07-13 23:54

Rejestracja: 11 lat temu

Ostatnio: 4 lata temu

0
  1. Nie jest to deklaracja klasy
  2. Przeczytaj pierwszy lepszy tutorial o klasach
  3. Konstrukcja powinna wyglądać tak:
    • alokujesz miejsce na n elementów
    • zapełniasz to miejsce stopniowo
    • gdy je zapełniasz, to alokujesz 2 razy wiecej miejsca i kopiujesz dane z poprzedniej tablicy, potem usuwasz ja (stara)

Pozostało 580 znaków

2012-07-14 06:18

Rejestracja: 8 lat temu

Ostatnio: 6 lat temu

0

Przepraszam, jest to oczywiście definicja klasy.
Czy alokacja powinna być zrobiona przy pomocy funkcji 'alloc'?

edytowany 1x, ostatnio: flash44, 2012-07-14 12:58
Jeżeli chcesz to w fajny sposób zrozumieć to kup sobie Pasje C++. - Bumcykowy 2012-07-14 08:52

Pozostało 580 znaków

msm
2012-07-14 11:40
msm
Administrator

Rejestracja: 11 lat temu

Ostatnio: 1 dzień temu

0

Problem z tym kodem jest taki że nie ma szans się skompilować...

Prosty szablon który możesz wypełnić resztą metod:

class Wektor{
private:
    int *data;

public:
    Wektor() { data = new int[4]; }
    ~Wektor() { delete data; }
    void add(int i);
    int& at(int i) { return data[i]; }
    const int& at(int i) const { return data[i]; }
};
edytowany 4x, ostatnio: msm, 2012-07-14 17:44
Pokaż pozostałe 9 komentarzy
Ta druga metoda zwraca stałą referencję i może być użyta na stałym obiekcie. Tzn. nie można modyfikować tego, co ona zwróci. Zazwyczaj takie metody, które zwracają referencje robi się parami. - Endrju 2012-07-14 17:46
Endrju już dokładnie opisał, ale też spróbuje - jeśli masz int& to dostajesz referencje do pola, czuli jeśli napiszesz wektor.at(2) = 5; to zadziała, tak samo jeśli napiszesz int x = wektor.at(2). Ale jeśli masz const wektor, to nie możesz na nim wywoływać nie-stałej funkcji - czyli funkcja musi być int& at(int i) const - ale to z kolei nie jest OK, bo żeby funkcja była const nie możesz pobierać niestałej referencji - więc zmianiamy na const int& at(int i) const i volia. - msm 2012-07-14 17:58
Ok, wydaje mi się, że już rozumiem ;) - Patryk27 2012-07-14 18:00
@MSM, jeśli boisz się powiadomień, to zamiast edytować post po prostu go kasuj i wyślij nowy. Jeśli ktoś będzie marudził - banuj. - somekind 2012-07-17 22:48
Pomysł dobry, ale nie mogę banować więc nie do zastosowania w praktyce :> W zasadzie mógłbym zbanować profilaktycznie wszystkich komentujących mój post, usunąć ich wszystkie komentarze i posty z bazy danych oraz edytować mój post. - msm 2012-07-18 11:22

Pozostało 580 znaków

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0