Czy jest możliwe zadeklarowanie wartości stałej statycznej wirtualnej w klasie C ++?
Chciałbym mieć klasę bazową, która ma stałe pole (jak unikalny identyfikator skojarzony z klasą, której nie można modyfikować po czasie kompilacji). Do tej porystatic const
deklaracja byłaby w porządku. Teraz chciałbym odziedziczyć tę klasę bazową i upewnić się, że dzieci tej klasy mają to samo pole, ale z własnymi wartościami. Jak mogę to zrobić?
Powiedzmy, że chcę mieć klasę bazowąBase
zID
pole, które posiadaint
wartość 0. Wtedy chciałbym mieć klasyA
, B
iC
, wszyscy oni są publicznymi dziećmiBase
i chciałbym się upewnić, że te dzieci też będą miałyID
pola z odpowiednimi wartościami 1, 2 i 3 (przez „upewnienie się”, mam na myśli coś takiego jak uzyskanie błędu kompilatora, jeśli nie mają jawnie zadeklarowanego identyfikatora).
Jeśli udałoby mi się zbudować ten scenariusz, spodziewałbym się, że poprosię oID
pole aBase*
wskaźnik, powinienem uzyskać różne wartości w zależności od tego, czy wskaźnik został utworzony jakonew A()
, new B()
lubnew C()
.
Domyślam się, że oświadczęID
tak jakvirtual static const
, co oczywiście nie ma sensu i daje błąd kompilatora.
Ale co mogę zrobić, aby osiągnąć opisany efekt? (Jedyną rzeczą, jaką mógłbym sobie wyobrazić, byłoby oświadczenieID
jako funkcja wirtualna zwracająca liczbę całkowitą, a następnie zapisująca wartość w ciele funkcji, ale szukam czegoś bardziej eleganckiego.)
Z góry dziękuję!