Klasa inicjalizacja stałych

Klasa inicjalizacja stałych
darthachill
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 94
0

Tak się zastanawiam, załóżmy że jesteśmy w ciele klasy:

jeżeli chcę aby każda klasa miała tablice która ma zawsze tyle samo elementów. (dla uproszczenia int, 20 elementow)
to mogę napisać

Kopiuj
int tab[20];

ale wtedy nie wiem ile tak naprawdę ta tablica ma elementów, i nie ma innego sposobu jak zrobić coś takiego

Kopiuj
int const n;
tab[n];
  1. nie ma żadnej funkcji jak length która bym pobrał wielkosc tablicy, zgadza się ?

Teraz zastanawiam sie nad 2 sposobami:

  • inicjalizacja lista inicjalizacyjna konstruktora bez podawania argumenty odnosnie wielkosci tablicy, ( zawsze będzie 20 )
Kopiuj
Klasa() : n(20) {}
 
  • bądz napisać w klasie
Kopiuj
static const n = 20;
  1. Czy jest jakaś różnica miedzy tymi 2 zapisami?
  2. Jeżeli tak, to który kiedy stosować ?

Dziękuje za poświęcony czas i pozdrawiam.

Sopelek
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 467
1

Skorzystaj z std::array.

Endrju
  • Rejestracja: dni
  • Ostatnio: dni
1

Takie coś:

Kopiuj
const int n;
tab[n];

Jako składnik klasy to nie jest poprawny kod C++.

Takie coś:

Kopiuj
static const int n = 20;
tab[n];

Jest ok.

Takie coś:

Kopiuj
static constexpr int n = 20;
tab[n];

Też jest ok.

Poza tym do rozmiaru tablicy powinieneś użyć typu std::size_t (#include <cstddef>), a nie int.

spartanPAGE
  • Rejestracja: dni
  • Ostatnio: dni
0

Będize różnica, gdy prześlesz tą stałą przez parametr.

darthachill
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 94
0
Kopiuj
Skorzystaj z std::array.

Dzięki, nie wiedziałem o istnieniu tej klasy, ale póki co program musze zrobic na zwykłych tablicach :)

Kopiuj
Takie coś:

const int n;
tab[n];


Jako składnik klasy to nie jest poprawny kod C++.
 
  1. Nie rozumiem? W symfonii Grębosz, inicjalizacja taką zmienną z listy inicjalizacyjnej konstruktora

  2. Miałeś na myśli coś takiego?

Kopiuj
#include <cstddef>

typedef unsigned int size_t;

Jakie z tego płyną korzyści :) ?

Resident
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 195
0
Kopiuj
const int n;
tab[n];

Nie możesz tak zrobić, bo nie podajesz wartości "n" a tworzysz tablice, niby ile elementową ?
Jeśli jest to unsigned int, wiesz, że nigdy nie będzie mniejszy od zera a tablice są indeksowane od zera.

  • Rejestracja: dni
  • Ostatnio: dni
0

Może tak?

Kopiuj
struct Array
{
    enum {size = 100};
    char buff[size];
};

Array a;
a.size;
matek3005
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 358
0
darthachill napisał(a):

jeżeli chcę aby każda klasa miała tablice która ma zawsze tyle samo elementów. (dla uproszczenia int, 20 elementow)
to mogę napisać

Kopiuj
int tab[20];

ale wtedy nie wiem ile tak naprawdę ta tablica ma elementów, i nie ma innego sposobu jak zrobić coś takiego

Ta tablica ma dokładnie sizeof(tab)/sizeof(tab[0]) elementów.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.