Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

overload static data member

187  1 2 3 все
desyman свой человек22.12.06 14:15
desyman
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
#1 
  scorpi_ nobody22.12.06 15:50
NEW 22.12.06 15:50 
в ответ desyman 22.12.06 14:15
Ну так используй, в чём проблема-то? Я например в своей JNI-библиотеке использовал в каждом сгенерированном классе
	static JClass this_class_;
static const char* CLASS_NAME;


#2 
Murr коренной житель22.12.06 17:10
Murr
NEW 22.12.06 17:10 
в ответ desyman 22.12.06 14:15

хочется chtoby staticheskie peremennye dlja dvuh klassov byli raznymi
------
вопрос такой:
А как их можно сделать одинаковыми?
#3 
desyman свой человек24.12.06 11:41
desyman
NEW 24.12.06 11:41 
в ответ Murr 22.12.06 17:10, Последний раз изменено 24.12.06 11:42 (desyman)
одинаковыми они будут всегда, если они не переопределены в дочернем классе
статик = типа глобальная переменная данного контекста
где-то нашел такию фразу,
"статик переменная занимает одну и ту же ячейку памяти для всех обэктов данного класса и классов-потомков."
собстна в етом и вопрос: возможно ли их переопределить если они статик ?
идеологически ето будет неверно и вроде как в некотором смысле нарушать принцип обявления статик переменной.
#4 
Murr коренной житель24.12.06 12:45
Murr
NEW 24.12.06 12:45 
в ответ desyman 24.12.06 11:41
Ты бы определился с тем, что тебе надо.
Ну и это - читать надо бы научиться...
#5 
desyman свой человек24.12.06 12:48
desyman
NEW 24.12.06 12:48 
в ответ Murr 24.12.06 12:45
через статик не получилося
сделал через глобальные переменные
#6 
desyman свой человек24.12.06 12:49
desyman
24.12.06 12:49 
в ответ Murr 24.12.06 12:45
про чтение поподробнее плз
#7 
desyman свой человек24.12.06 12:54
desyman
NEW 24.12.06 12:54 
в ответ scorpi_ 22.12.06 15:50
если в классе член статик, то все ок, и во всех дочерных классах виден он же.
вот когда я его в одном из дочерных классов хочу переопределить. то значение переменной берется из родительского класса
вот и не пойму я не фига. компайлер не ругается. говорит все тип топ
#8 
Murr коренной житель24.12.06 12:54
Murr
NEW 24.12.06 12:54 
в ответ desyman 24.12.06 12:49
про чтение поподробнее плз
------
Читать, до полного осознания:
"статик переменная занимает одну и ту же ячейку памяти для всех обэктов данного класса и классов-потомков."
#9 
Murr коренной житель24.12.06 12:58
Murr
NEW 24.12.06 12:58 
в ответ desyman 24.12.06 12:54
вот и не пойму я не фига.
-----
читай про операторы: :: и ->
#10 
Simple Nothing is f*cked24.12.06 13:03
Simple
NEW 24.12.06 13:03 
в ответ desyman 24.12.06 12:48
Это, по-моему, еще хуже. Ты бы описал, что ты хочешь сделать.
#11 
desyman свой человек24.12.06 13:32
desyman
NEW 24.12.06 13:32 
в ответ Simple 24.12.06 13:03
есть абстрактный класс
ТХелих
у которого есть 10 разных дочерних классов (различия только в кострукторах)
необходимо добавить набор переменных (характеристик) во все обекты произведенные дочерними классами
набор характеристик и операзии с ними - те же для каждого из 10 дочерних классов (поетому хотелось добавить все в ТХелих)
значения характеристик - различаются для некоторых из дочерных классов, но неизменны для обектов одного класса (поетому хочется сделать их статик)
#12 
Simple Nothing is f*cked24.12.06 17:05
Simple
NEW 24.12.06 17:05 
в ответ desyman 24.12.06 13:32
по-моему, классический случай для traits.
#13 
  scorpi_ nobody24.12.06 17:07
NEW 24.12.06 17:07 
в ответ Simple 24.12.06 17:05
На первый постинг посмотри, и посчитай ошибки. А потом подумай, не рановато ли автору говорить о продвинутых фичах.
#14 
Simple Nothing is f*cked24.12.06 17:13
Simple
NEW 24.12.06 17:13 
в ответ scorpi_ 24.12.06 17:07
Я и сам еще только учусь :)
#15 
desyman свой человек24.12.06 18:16
desyman
NEW 24.12.06 18:16 
в ответ scorpi_ 24.12.06 17:07
я вижу только две опечатки
#16 
  scorpi_ nobody24.12.06 18:23
NEW 24.12.06 18:23 
в ответ desyman 24.12.06 18:16, Последний раз изменено 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;
}


#17 
desyman свой человек24.12.06 19:04
desyman
NEW 24.12.06 19:04 
в ответ scorpi_ 24.12.06 18:23
я согласен с тем что етот код должен работать в обшем смысле и в конкретном частном примере тоже.
я привел пример кода весьма упрошенно чтобы описать проблему. в моей конкретной имплементации етот вариант не работает.
если я буду тут постить все свои ис ходники ты вы тут будете читать до полуночи
чего я и старался избежать
#18 
desyman свой человек24.12.06 19:45
desyman
NEW 24.12.06 19:45 
в ответ scorpi_ 24.12.06 18:23, Последний раз изменено 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;
}


#19 
  scorpi_ nobody24.12.06 19:48
NEW 24.12.06 19:48 
в ответ desyman 24.12.06 19:04
Всё не надо. Надо упрощённый до предела работающий пример. И я так и не понял, что у тебя не работает. В твоём примере обе строчки выводят разные значения.
#20 
1 2 3 все