[C/C++] dobre zwyczaje ...

0

Ucze sie programowac obiektowo w C++ i chciałbym sie nauczyć tez dobrych nawyków . Mam jakąs klase . W tej klasie mam tablice ( private ) . To ma byc tablica statyczna z "n" elementami . W metodach tej klasy będe korzystał z dł tablicy więc potrzebuje tej wartości . W klasie nie moge zrobić stałej typu const , bo w definicji klasy nie można inicjowac zmiennych . Wg mnie pozostają 2 rozwiązania :
zrobić na początku kodu:
[code]#define n wartość [/code]
, lub zrobić publiczna ( dla całęgo programu , nie klasy ) zmienną const , np :
[code]const int n=wart ; [/code]
. Define sie nie powinno stosować , bo zamiast wartości wpisze głupoty i program sie pie*** , a co do stałej zmiennej publicznej w programie to też nie powinno sie stosowac , bo po to sa klasy żeby już tych zmiennych publicznych nie stosować . Chodzi mi o to żeby tylko zmienić wartość tej długości tablicy w jednym miejscu kodu , a nie latać po wszystkich metodach i zmieniać ręcznie wszystkie miejsca gdzie korzystam z dł tablicy (np pętle gdzie przechodze po wszystkich elementach ) . Prosze o podpowiedź , jak elegancko powinno sie to zrobić . Mam nadzieje , że rozumiecie o co mi chodzi .

0

Rada dla początkujących:

Jak nie wiesz, jak coś zrobić "na skróty", to zrób to tak, jak umiesz!! :-) :-)

Pozdrawiam!!

0

Yo
Ok mozesz zadeklarowac sobie zmienna const, a pozniej inicjalizuj ja ustalona przez ciebie wartoscia (n) w konstruktorze, przez liste inicjalizacyjna.
Czyli np cos takiego:
[code]
class aaa
{
private:
const int wartosc;
public:
aaa(int wart=n): wartosc(wart){}
};

0

No dobrze , ale i tak dalej nie moge zrobić pola pryawatnego w tej klasie : czyli tablicy o rozmiarze wartosc

0

To ma byc tablica statyczna z "n" elementami .

jak mam rozumiec statyczna: static czy np.: int tab[10]; ?

0

Sorki ! Statyczna w sensie tego że pamięc dla niej ma nie być przydzielana dynamicznie ( bez new czy malloc ) , czyli np :
int tab[20];

0

Jakos cie nie rozumiem, jedyne dobre rozwiazanie bedzie polegalo na stworzeniu tablicy dynamicznie, bo to o co ci chodzi, wydaje mi sie bez sensu (wartosc n dostajesz dopiero po wywolaniu konstruktora, a tablice o takiej wartosci tylko mozna stworzyc dynamicznie).

[code]
class aaa
{
private:
const int wartosc;
int* tab;
public:
aaa(int wart=n): wartosc(wart)
{
tab = new int[wart];
}
};
[/code]

Teraz jesli chcesz miec obiekt z tablica:
[code]
aaa obj; // stworzy tablice o rozmiarze n
aaa obj(3); // stworzy tablice o rozmiarze 3
[/code]

moze tak byc ?

0

Ale ja nie chciałem tablicy dynamicznej ( alokowanej pamięci ) . Trzeba rezerwować pamiec w konstruktorze i zwalniac w destruktorze . Te sprawy pozostawmy kompilatorowi , gdy jest to mozliwe .
Wart n nie koniecznie dostaje po wywolaniu konstruktora , moge uzyc #define n dl_tab
lub
static int n=dl_tab ( globalna ) na poczatku kodu .
Tylko nie wiem czy tak sie powinno robic .
Chodzi mi o to ze nie ma sensu alokowac pamieci jak nie jest to konieczne ( zawsze staly rozmiar tablicy ) , a skoro juz robie tablice nie dynamiczna ( int tab[dl_tab] ) , to niech ta liczba dl_tab jest zdefiniowana w jednym miejscu w kodzie , zeby latwo mozna bylo sie nia poslugiwac ( np w metodach klasy przy przechodzeniu po wszystkich elementach tablicy w petli jak zmienie w jednym miejscu rozmiar tablicy to bedzie to uwzglednione wszedzie ) .
Wiem , to może nie mieć najmniejszego sensu . Po prostu ostatnio męczą mnie takie pytania egzystencjalne i musze coś z tym zrobić ;)

0

No to rob jak chcesz, ale ja bym zrobil prywatna zmienna statyczna w klasie (pozniewaz tablica w kazdym objekcie tej klasy bedzie miala taki sam rozmiar).

Ps. a myslalem ze to jakies "powazne" pytanie :-P

0

Ale wtedy trzeba alokować pamięć dla wskaźnika , a to nie jest konieczne ( po co dodawac linie kodu , skorą można to zrobić inaczej ) . Stosując
#define
lub
const int
jako zmienną globalną nie trace miejsca na rezerwowanie pamięci i jej zwalnianie , po prostu jest o wiele krócej i ładniej .
Ale nie wiem czy można używać define , oraz publicznych zmiennych typu const ( czy wypada ;) .
P.S. TO BYŁO POWAŻNE PYTANIE !!! :-[

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