Login
overload static data member
NEW 22.12.06 14:15
class A
{
static float a;
};
A::a = 1.0;
class B::piblic A
{
static float a;
};
B::a = 2.0;
main()
{
cout << A::a << endl;
cout << B::a << endl;
}
вопрос такой:
хочется chtoby staticheskie peremennye dlja dvuh klassov byli raznymi
class A
{
static float a;
};
A::a = 1.0;
class B::piblic A
{
static float a;
};
B::a = 2.0;
main()
{
cout << A::a << endl;
cout << B::a << endl;
}
вопрос такой:
хочется chtoby staticheskie peremennye dlja dvuh klassov byli raznymi
NEW 22.12.06 15:50
in Antwort desyman 22.12.06 14:15
Ну так используй, в чём проблема-то? Я например в своей JNI-библиотеке использовал в каждом сгенерированном классе
static JClass this_class_;
static const char* CLASS_NAME;
NEW 22.12.06 17:10
хочется chtoby staticheskie peremennye dlja dvuh klassov byli raznymi
------
вопрос такой:
А как их можно сделать одинаковыми?
in Antwort desyman 22.12.06 14:15
хочется chtoby staticheskie peremennye dlja dvuh klassov byli raznymi
------
вопрос такой:
А как их можно сделать одинаковыми?

NEW 24.12.06 11:41
in Antwort Murr 22.12.06 17:10, Zuletzt geändert 24.12.06 11:42 (desyman)
одинаковыми они будут всегда, если они не переопределены в дочернем классе
статик = типа глобальная переменная данного контекста
где-то нашел такию фразу,
"статик переменная занимает одну и ту же ячейку памяти для всех обэктов данного класса и классов-потомков."
собстна в етом и вопрос: возможно ли их переопределить если они статик ?
идеологически ето будет неверно и вроде как в некотором смысле нарушать принцип обявления статик переменной.
статик = типа глобальная переменная данного контекста
где-то нашел такию фразу,
"статик переменная занимает одну и ту же ячейку памяти для всех обэктов данного класса и классов-потомков."
собстна в етом и вопрос: возможно ли их переопределить если они статик ?
идеологически ето будет неверно и вроде как в некотором смысле нарушать принцип обявления статик переменной.
NEW 24.12.06 12:45
in Antwort desyman 24.12.06 11:41
NEW 24.12.06 12:48
in Antwort Murr 24.12.06 12:45
NEW 24.12.06 12:54
in Antwort scorpi_ 22.12.06 15:50
если в классе член статик, то все ок, и во всех дочерных классах виден он же.
вот когда я его в одном из дочерных классов хочу переопределить. то значение переменной берется из родительского класса
вот и не пойму я не фига. компайлер не ругается. говорит все тип топ
вот когда я его в одном из дочерных классов хочу переопределить. то значение переменной берется из родительского класса
вот и не пойму я не фига. компайлер не ругается. говорит все тип топ

NEW 24.12.06 12:54
in Antwort desyman 24.12.06 12:49
про чтение поподробнее плз
------
Читать, до полного осознания:
"статик переменная занимает одну и ту же ячейку памяти для всех обэктов данного класса и классов-потомков."
------
Читать, до полного осознания:
"статик переменная занимает одну и ту же ячейку памяти для всех обэктов данного класса и классов-потомков."
NEW 24.12.06 12:58
in Antwort desyman 24.12.06 12:54
NEW 24.12.06 13:03
in Antwort desyman 24.12.06 12:48
Это, по-моему, еще хуже. Ты бы описал, что ты хочешь сделать.
NEW 24.12.06 13:32
in Antwort Simple 24.12.06 13:03
есть абстрактный класс
ТХелих
у которого есть 10 разных дочерних классов (различия только в кострукторах)
необходимо добавить набор переменных (характеристик) во все обекты произведенные дочерними классами
набор характеристик и операзии с ними - те же для каждого из 10 дочерних классов (поетому хотелось добавить все в ТХелих)
значения характеристик - различаются для некоторых из дочерных классов, но неизменны для обектов одного класса (поетому хочется сделать их статик)
ТХелих
у которого есть 10 разных дочерних классов (различия только в кострукторах)
необходимо добавить набор переменных (характеристик) во все обекты произведенные дочерними классами
набор характеристик и операзии с ними - те же для каждого из 10 дочерних классов (поетому хотелось добавить все в ТХелих)
значения характеристик - различаются для некоторых из дочерных классов, но неизменны для обектов одного класса (поетому хочется сделать их статик)
NEW 24.12.06 17:07
in Antwort Simple 24.12.06 17:05
На первый постинг посмотри, и посчитай ошибки. А потом подумай, не рановато ли автору говорить о продвинутых фичах.
NEW 24.12.06 18:23
in Antwort desyman 24.12.06 18:16, Zuletzt geändert 24.12.06 18:23 (scorpi_)
Ну попробуй откомпилировать. Вообще постить полагается компилируемые куски кода, иначе ты просто проявляешь неуважение к собеседникам. То бишь ты должен был запостить такой вот кусок кода:
В ответ на:
#include <iostream>
using namespace std;
struct A
{
static float a;
};
float A::a = 1.0;
struct B : public A
{
static float a;
};
float B::a = 2.0;
int main()
{
cout << A::a << endl;
cout << B::a << endl;
}
24.12.06 19:04
in Antwort scorpi_ 24.12.06 18:23
я согласен с тем что етот код должен работать в обшем смысле и в конкретном частном примере тоже.
я привел пример кода весьма упрошенно чтобы описать проблему. в моей конкретной имплементации етот вариант не работает.
если я буду тут постить все свои ис ходники ты вы тут будете читать до полуночи
чего я и старался избежать
я привел пример кода весьма упрошенно чтобы описать проблему. в моей конкретной имплементации етот вариант не работает.
если я буду тут постить все свои ис ходники ты вы тут будете читать до полуночи
чего я и старался избежать
NEW 24.12.06 19:45
in Antwort scorpi_ 24.12.06 18:23, Zuletzt geändert 24.12.06 19:51 (desyman)
#include <iostream>
using namespace std;
class A
{
protected:
double a;
public:
void set(double i){a=i;}
double* get(){return &a;}
};
//float* A::a=(float*) 1;
class B:public A
{
protected:
static double a;
public:
};
double B::a= (double) 2;
A a_arr[10];
B b_arr[10];
int main ()
{
for(int i=0;i<10;++i)
{
a_arr.set((double) i);
b_arr.set((double) i);
printf("%d A::a = %p %2.0f B::a = %p %2.0f \n",
i, (a_arr.get()), *(a_arr.get()), (b_arr.get()), *(b_arr.get()));
}
return 1;
}
NEW 24.12.06 19:48
in Antwort desyman 24.12.06 19:04
Всё не надо. Надо упрощённый до предела работающий пример. И я так и не понял, что у тебя не работает. В твоём примере обе строчки выводят разные значения.