inicjalizacja tablicy CONST w konstuktorze

0

Mam taki problem:
potrzebuje w klasie mieć tablice typu const, mam problem z jej inicjalizacją. w ciele klasy nie można definiować wartości (mimo, że mozna dla zwykłych nietablicowych zmiennych), a w konstuktorze wywala bład ze nie mozna modyfikwac consta)
Tablica moze byc typu static
Przy czym nie interesuja mnie rozwiazania ktore widzialem, na forum, ze zmienna jest typu static a tablica jest inicjalizowana poza ciałem klasy w programie. Wszystko musi sie dziac w ciele klasy

0

Lista konstrukcyjna.

0

Zwana również listą inicjalizacyjną, a po jankesku zwane "initializer list" lub "initialization list".

0

przykładowy programik np. do tego?

użycie listy inicjalizacyjnej nie wiąże się z tym, że po prostu kopiujemy zawartość jednaj tablicy do drugiej? co by oznaczało, że ta tablica, z której chciałbym skopiowac musi znajdowac sie w innym miejscu w programie a chodzi o to, ze ja robie samodzielna klase, z ktorej bedzie korzystac inny program i wszystko powinno dziac sie po mojej stronie

0

IMHO po co ci tablica stałych? Jeśli to mają być stałe dla danej klasy no to z definicją statycznego pola nie powinieneś mieć kłopotu.
Jeśli te stałe mają być zdefiniowane dla każdego obiektu osobno to wtedy nie widze potrzeby definiowania tego jako stałą, ale jako zwykłą tablicę, hermetyzacja klasy powinna zrobić resztę.

0

Nie jestem pewien, ale raczej nie da się tego zrobić. Można to obejść vector'em, ale stałej tablicy jako takiej nie zainicjalizujesz w konstruktorze

0

Wszystko się da tylko trzeba chcieć:

class Foo {
private:
  const int m_array[10];
public:
  Foo() : m_array({1, 2, 3, 4, 5, 6, 7, 8, 9, 0}) {}
}

I działa.

0
MarekR22 napisał(a)

IMHO po co ci tablica stałych?

Implementuje kryptograficzną funkcję skrótu : tablice stałych są tutaj konieczne. Oczywiście na razie sobie testuje program korzystając ze zwykłej (nie stałej) tablicy i tak pewnie oddam program jeżeli się nie uda tego zmienić no ale chciałem zrobić to najlepiej jak się da i w sumie zaciekawił mnie ten problem.

Zaproponowane rozwiązanie oczywiście nie działa w Visual2010 jak już wspomniano.

0

Tak tego nie zrobisz ale skoro chcesz mieć wszystko wewnątrz klasy, możesz stworzyć klasę/strukturę zagnieżdżoną, w niej zadeklarować i zainicjalizować zwykłą tablicę int, a wewnątrz klasy głównej utworzyć stały obiekt klasy lokalnej. Jednym słowem opakuj sobie tablice i stwórz obiekt jako const.

2

czyli przykładowo tak:

class Example {
    private:
        struct array {
            int tab[3];
            array() 
            {
                tab[0] = 1;
                tab[1] = 2; 
                tab[2] = 3;
            }
            const int & operator[](int i) const { return tab[i]; }
        };

    public:
        const array tab;
        Example(){}
};
0

dzieki bardzo

1

skoro tablica może być statyczna, to da się zgodnie ze standardem:

class Foo {
private:
  static const int m_array[10];
};

const int Foo::m_array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};

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