Klasa inicjalizacja stałych

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ć

int tab[20];

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

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 )
Klasa() : n(20) {}
 
  • bądz napisać w klasie
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.

1

Skorzystaj z std::array.

1

Takie coś:

const int n;
tab[n];

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

Takie coś:

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

Jest ok.

Takie coś:

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.

0

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

0
Skorzystaj z std::array.

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

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?

#include <cstddef>

typedef unsigned int size_t;

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

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

0

Może tak?

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

Array a;
a.size;
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ć

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.

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