Skocz do zawartości
LyanVu

Ćwiczenia na wskaźnikach(opakowane w klasę)

Rekomendowane odpowiedzi

Witam, mam mały/duży problem, ponieważ nie dawno co uczyłem się wskaźników i postanowiłem je przećwiczyć. Najpierw pokażę kod:

Klasy.h:

class cIntArray
{
private:
const static short unsigned int mDOMYSLNY = 5;
unsigned mRozmiar;
int* mpTablica = NULL;
public:
cIntArray() { mRozmiar = mDOMYSLNY; }
cIntArray(unsigned Rozmiar) { mRozmiar = Rozmiar; mpTablica = new int[mRozmiar]; }
~cIntArray() { delete[] mpTablica; }

bool SetWartosc(int wartosc, int indeks);
unsigned GetRozmiar() const { return mRozmiar; }
unsigned GetDane(unsigned Indeks) const { return mpTablica[indeks]; }
bool SetRozmiar(int NowyRozmiar);

};

Main.cpp(wiem, że implementacje lepiej w oddzielnym module ale to tylko krótkie ćwiczenie):

#include <iostream>
#include <conio.h>
#include <memory.h>
#include "Klasy.h"

using namespace std;

bool cIntArray::SetWartosc(int wartosc, int indeks)
{
if (indeks > mRozmiar || indeks < 0) return false;

mpTablica[indeks] = wartosc;
return true;
}
bool cIntArray::SetRozmiar(int NowyRozmiar)
{
if (NowyRozmiar == mRozmiar) return false;

int* pNowaTablica = new int[NowyRozmiar];
memcpy(pNowaTablica, mpTablica, NowyRozmiar * sizeof(int));
delete[] mpTablica;

mpTablica = pNowaTablica;
mRozmiar = NowyRozmiar;
return true;
}

int main()
{
cout << "Podaj Rozmiar Tablicy: ";
int nRozmiar;
cin >> nRozmiar;
cIntArray* pIntTablica = new cIntArray(nRozmiar);

cout << endl << pIntTablica->GetRozmiar();
_getch();

int nIndeks, nWartosc;
cout << endl << "Podaj Indeks: ";
cin >> nIndeks;
cout << endl << "Podaj Wartosc: ";
cin >> nWartosc;

cout << endl << pIntTablica->GetDane(nIndeks);
_getch();

system("cls");

cout << "Podaj Indeks do sprawdzenia: ";
cin >> nIndeks;
cout << endl << pIntTablica->GetDane(nIndeks);
_getch();

cout << endl << "Podaj Nowy Rozmiar: ";
cin >> nRozmiar;
pIntTablica->SetRozmiar(nRozmiar);

cout << endl << "Dane o tamtym indeksie: ";
cout << pIntTablica->GetDane(nIndeks);

delete pIntTablica;

_getch();
return 0;
}

 

A problem jest taki, iż za każdym razem niezależnie jaką wartość wpiszę to jest tam liczba iluś cyfrowa(6 może 7) i przy każdym uruchomieniu programu jest taka sama -.-.

Co się dzieje?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Główny problem, przez który Twój kod nie działa to: Nie ustalasz wartości w tablicy, z tego co widzę nie używasz (nigdzie) metody cIntArray::SetWartosc.

 

Ale zauważyłem kilka niedociągnięć... Domyślny konstruktor nie tworzy tablicy intów, mimo że mDOMYSLNY jest równy 5.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Wow... hahah.. Jak ja mogłem to przeoczyć -.- No ale dziękuję :) A, że nie tworzę domyślnego to wiem, bo byłem w środku tworzenia programu, więc miałem go zamiar użyć ;p

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

W ogóle co to za nazewnictwo? Albo UstawWartosc, albo SetValue, albo UstawRozmiar, albo SetSize. Polsko-angielskie nazwy naprawdę ciężko będzie Ci ogarnąć, więc lepiej konsekwentnie nazywaj, po polsku, albo po angielsku. ;)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×