Статические переменные в базовом классе совместно использованы всеми производными классами?

До и включая Java 1.4, необходимо было предоставить файлу HTML package.html, как описано в других ответах.

Начиная с Java 1.5 можно также обеспечить package-info.java, который содержит обычный комментарий Javadoc (никакой HTML). Последний предпочтен, поскольку это дает Вам некоторые дополнительные функции (особенно аннотации пакета).

Детали: документы Sun для javadoc

50
задан einpoklum 10 March 2018 в 21:10
поделиться

3 ответа

Помимо замечательных моментов, упомянутых другими, я также хотел бы добавить главный недостаток, который я обнаружил: все они отображаются в профилировщике как анонимные подпрограммы. По какой-то причине Devel :: DProf просто не знает, как вычислить имя.

Теперь я надеюсь , что более новый Devel :: NYTProf может работать лучше, но я не пробовал.

В качестве альтернативы вы можете использовать одну функцию, которая возвращает ссылку:

class Base {
    static int staticVarInst;
public:
    virtual int &staticVar() { return staticVarInst; }
}
class Derived: public Base {
    static int derivedStaticVarInst;
public:
    virtual int &staticVar() { return derivedStaticVarInst; }
}

Затем вы можете использовать это как:

staticVar() = 5;
cout << staticVar();
43
ответ дан 22 September 2019 в 20:05
поделиться

Они будут использовать один и тот же экземпляр.

Вам нужно будет объявить отдельные статические переменные для каждого подкласса, или вы можете рассмотреть простую статическую карту, в которой вы можете хранить переменные, на которые есть ссылки производными классами.


Edit : Возможным решением этой проблемы было бы определение вашего базового класса как шаблона. Наличие статической переменной, определенной в этом шаблоне, будет означать, что каждый производный класс будет иметь собственный экземпляр статической переменной.

3
ответ дан 22 September 2019 в 20:05
поделиться

В вашем случае есть только одна staticVar : Base :: staticVar

Когда вы объявляете статическую переменную в классе, переменная объявляется только для этого класса. В вашем случае DerivedA даже не может видеть staticVar (поскольку он закрытый, незащищенный или общедоступный), поэтому он даже не знает о существовании переменной staticVar .

3
ответ дан 22 September 2019 в 20:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: