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ę!

questionAnswers(1)

yourAnswerToTheQuestion