Может ли полиморфизм использоваться для статического члена данных класса C++ (переменная класса a.k.a.)?Полиморфизм на статическом элементе данных класса C++
Обновление: Как указано в b4hand, полиморфные методы должны быть объявлены в базовом классе. Но это невозможно в этом случае, потому что заранее неизвестно, какие методы пользователь создаст в контейнере.
Я отредактировал пример, чтобы включить ссылки; Спасибо, что напомнили.
Вот моя попытка инициализировать статический базовый тип (numBase) к производному типу (кол-во):
#include <iostream>
class numBase //numBase is in a library user can not edit
{
};
class numDer : public numBase //user defined class is a kind of numBase
{
private:
int num;
public:
void printNum() { std::cout << " numDer=" << num; }
void inc() { num++; }
};
class containerBase //containerBase is in a library user can not edit
{
protected:
//static numDer& count; //this compiles, but count can not be initialized to other types
static numBase& count; //this causes error six lines down from here
};
class containerDerived : public containerBase //user defined class is a kind of containerBase
{
public:
void inc() { count.inc(); } //error: 'count' was not declared in this scope
void printCount() { std::cout << " containerDerived"; count.printNum(); }
};
/************************ user program **********************/
//initilialize static variable
numDer number; //number could be any user defined type derived from numBase
numDer& containerBase::count = number; //initialize count to a kind of numBase
int main()
{
containerDerived container1;
containerDerived container2;
container1.printCount();
container1.inc();
container2.inc();
container1.printCount();
}
Спасибо.
'numBase' - пустой класс. Он не имеет метода 'inc()'. Ошибка компилятора здесь довольно описательна, можете ли вы подробнее рассказать о своей реальной проблеме? –
Если вы хотите полиморфизм, используйте указатели, как и везде. – molbdnilo
Вы не можете, потому что 'count' является экземпляром' numBase', а не указателем 'numBase'. –