Login
overload static data member
NEW 24.12.06 19:58
in Antwort scorpi_ 24.12.06 19:48, Zuletzt geändert 24.12.06 20:00 (desyman)
NEW 24.12.06 20:04
in Antwort desyman 24.12.06 19:45
Compiling...
main.cpp
i:\projects\source\test\main.cpp(32) : error C2228: left of '.set' must have class/struct/union
type is 'A [10]'
i:\projects\source\test\main.cpp(33) : error C2228: left of '.set' must have class/struct/union
type is 'B [10]'
i:\projects\source\test\main.cpp(35) : error C2228: left of '.get' must have class/struct/union
type is 'A [10]'
i:\projects\source\test\main.cpp(35) : error C2228: left of '.get' must have class/struct/union
type is 'A [10]'
i:\projects\source\test\main.cpp(35) : error C2228: left of '.get' must have class/struct/union
type is 'B [10]'
i:\projects\source\test\main.cpp(35) : error C2228: left of '.get' must have class/struct/union
type is 'B [10]'
6 error(s), 0 warning(s)
main.cpp
i:\projects\source\test\main.cpp(32) : error C2228: left of '.set' must have class/struct/union
type is 'A [10]'
i:\projects\source\test\main.cpp(33) : error C2228: left of '.set' must have class/struct/union
type is 'B [10]'
i:\projects\source\test\main.cpp(35) : error C2228: left of '.get' must have class/struct/union
type is 'A [10]'
i:\projects\source\test\main.cpp(35) : error C2228: left of '.get' must have class/struct/union
type is 'A [10]'
i:\projects\source\test\main.cpp(35) : error C2228: left of '.get' must have class/struct/union
type is 'B [10]'
i:\projects\source\test\main.cpp(35) : error C2228: left of '.get' must have class/struct/union
type is 'B [10]'
6 error(s), 0 warning(s)
NEW 26.12.06 10:11
in Antwort scorpi_ 24.12.06 20:04
NEW 26.12.06 10:27
in Antwort scorpi_ 24.12.06 20:04
Тебе нужно в дочернем классе переписать метод "set", в котором ты должен указать на переменную "а" из класса "А" как this::a (Я не уверен в правильности синтакса...).
А вообще-то у тебя две разные переменные и почему ты их одним именем обозвал?...
А вообще-то у тебя две разные переменные и почему ты их одним именем обозвал?...
26.12.06 10:36
in Antwort scorpi_ 24.12.06 20:04
Э-э... прошу прощения, последнее адресовано вопрошающему.
NEW 26.12.06 18:01
in Antwort joldosch 26.12.06 10:27
NEW 26.12.06 18:37
in Antwort desyman 22.12.06 14:15, Zuletzt geändert 26.12.06 18:48 (desyman)
В ответ на:
#include <iostream>
using namespace std;
class A
{
protected:
// static double a;
double a;
public:
void set(const double i){this->a=i;}
double* get(){return &(this->a);}
};
class B:public A
{
protected:
static double a;
public:
};
class C:public A
{
protected:
static double a;
public:
};
//double A::a= (double) 1;
double B::a= (double) 2;
double C::a= (double) 3;
B b_arr[5];
C c_arr[5];
int main ()
{
for(int k=0;k<5;++k)
{
b_arr[k].set((double) 4);
// c_arr[k].set((double) 5);
printf("%d C::a = %p %2.0f B::a = %p %2.0f \n",
i,
(c_arr[k].get()), *(c_arr[k].get()),
(b_arr[k].get()), *(b_arr[k].get())
);
}
return 1;
}
0 C::a = 0x8049ac0 0 B::a = 0x8049a80 4
1 C::a = 0x8049ac8 0 B::a = 0x8049a88 4
2 C::a = 0x8049ad0 0 B::a = 0x8049a90 4
3 C::a = 0x8049ad8 0 B::a = 0x8049a98 4
4 C::a = 0x8049ae0 0 B::a = 0x8049aa0 4
a nado tak:
0 C::a = 0x8049ac0 3 B::a = 0x8049a80 4
1 C::a = 0x8049ac0 3 B::a = 0x8049a80 4
2 C::a = 0x8049ac0 3 B::a = 0x8049a80 4
3 C::a = 0x8049ac0 3 B::a = 0x8049a80 4
4 C::a = 0x8049ac0 3 B::a = 0x8049a80 4
NEW 26.12.06 19:21
in Antwort desyman 26.12.06 18:37, Zuletzt geändert 26.12.06 19:22 (scorpi_)
Да Вам батенька учебник курить надо. Вы же совершенно не понимаете, что такое static. Ваши get и set обращаются в любом случае к A::a, статические переменные B::a и C::a здесь просто остаются за кадром. И нафига тут вообще масивы и геты/сеты, когда мы говорим о статических переменных, которые для всех инстанций класса тождественны?
Что Вам здесь непонятно?
Что Вам здесь непонятно?
В ответ на:
#include <iostream>
using namespace std;
struct A { static double a; };
struct B : public A { static double a; };
struct C : public A { static double a; };
double A::a = 1.;
double B::a = 2.;
double C::a = 3.;
int main ()
{
cout << A::a << "\n" << B::a << "\n" << C::a << endl;
}
Ausgabe:
1
2
3
NEW 26.12.06 21:11
in Antwort desyman 26.12.06 18:01
обозвал одним именем, чтобы в дочернем классе
пользоватся методами родительского класса
------
Ну а если все же использовать то место, которым должно думать?
Например, попытаться ответить на абсолютно идиотский вопрос:
- А как родительский класс узнает каким классом он унаследован?
Ну или на другой:
- А что если наследников - несколько?
А вообще - стоит что-нибудь почитать по ООП...
пользоватся методами родительского класса
------
Ну а если все же использовать то место, которым должно думать?
Например, попытаться ответить на абсолютно идиотский вопрос:
- А как родительский класс узнает каким классом он унаследован?

Ну или на другой:
- А что если наследников - несколько?

А вообще - стоит что-нибудь почитать по ООП...
NEW 27.12.06 10:59
in Antwort Murr 26.12.06 21:11
> А как родительский класс узнает каким классом он унаследован?
Вопрос действительно идиотский. Читай учебник ;)
Вопрос действительно идиотский. Читай учебник ;)
NEW 27.12.06 12:27
in Antwort Simple 27.12.06 10:59, Zuletzt geändert 27.12.06 12:27 (desyman)
#include <iostream>
using namespace std;
class A
{
protected:
public:
virtual void set(double i) = 0;
virtual double get() const = 0;
};
//float* A::a=(float*) 1;
class B:public A
{
protected:
static double a;
public:
virtual void set(double i) { a =i;}
virtual double get() const { return a;}
};
class C:public A
{
protected:
static double a;
public:
virtual void set(double i) { a =i;}
virtual double get() const { return a;}
};
double B::a= (double) 22;
double C::a= (double) 33;
B b_arr[10];
C c_arr[10];
int main ()
{
for(int j=0;j<10;++j)
{
printf("%d B::a = %2.0f C::a = %2.0f \n",
i,
(b_arr[j].get()),
(c_arr[j].get()));
}
return 1;
}
NEW 27.12.06 12:39
in Antwort desyman 27.12.06 12:27, Zuletzt geändert 27.12.06 12:41 (desyman)
ок
переформулирую свой вопрос немножко
возможно ли, не используя статик и глобальные переменные,
разделить члены данные для дочерных классов не определяя по-новому для каждого дочернего класса члены методы, работаюшие с этими членами данными
-
Симпл предложил воспользоватся траитс, но честно говоря и вправду трудновато для понимания с первого раза.
переформулирую свой вопрос немножко
возможно ли, не используя статик и глобальные переменные,
разделить члены данные для дочерных классов не определяя по-новому для каждого дочернего класса члены методы, работаюшие с этими членами данными
-
Симпл предложил воспользоватся траитс, но честно говоря и вправду трудновато для понимания с первого раза.
NEW 27.12.06 14:35
Почему не сделаешь их константами ?
Статик-с другой оперы .
in Antwort desyman 24.12.06 13:32
В ответ на:
значения характеристик - различаются для некоторых из дочерных классов, но неизменны для обектов одного класса (поетому хочется сделать их статик)
значения характеристик - различаются для некоторых из дочерных классов, но неизменны для обектов одного класса (поетому хочется сделать их статик)
Почему не сделаешь их константами ?
Статик-с другой оперы .
NEW 27.12.06 14:48
у тебя и здесь ошибка
в printf - j,не i
И почему ты вообще используешь сишные функции , вместо плюсовых обьектов ?
in Antwort desyman 27.12.06 12:27
В ответ на:
int main ()
{
for(int j=0;j<10;++j)
{
printf("%d B::a = %2.0f C::a = %2.0f \n",
i,
(b_arr[j].get()),
(c_arr[j].get()));
}
return 1;
}
int main ()
{
for(int j=0;j<10;++j)
{
printf("%d B::a = %2.0f C::a = %2.0f \n",
i,
(b_arr[j].get()),
(c_arr[j].get()));
}
return 1;
}
у тебя и здесь ошибка
в printf - j,не i
И почему ты вообще используешь сишные функции , вместо плюсовых обьектов ?
NEW 27.12.06 15:25
конст = не перезаписываемая
статик = одно и то же значение для всех обектов (инициаций) класса
мне нужно второе
in Antwort Chipolino 27.12.06 14:35
В ответ на:
В ответ на:
значения характеристик - различаются для некоторых из дочерных классов, но неизменны для обектов одного класса (поетому хочется сделать их статик)
Почему не сделаешь их константами ?
Статик-с другой оперы .
В ответ на:
значения характеристик - различаются для некоторых из дочерных классов, но неизменны для обектов одного класса (поетому хочется сделать их статик)
Почему не сделаешь их константами ?
Статик-с другой оперы .
конст = не перезаписываемая
статик = одно и то же значение для всех обектов (инициаций) класса
мне нужно второе
NEW 27.12.06 17:54
Дык сам написал неизменяемая
Ключевое слово mutable ;-)
Может инстанций ?
ЗЫ.Постарайся сформулировать свою проблему человеческим,русским языком.
Чего , конкретно , ты хочешь добиться ?
in Antwort desyman 27.12.06 15:25, Zuletzt geändert 27.12.06 17:59 (Chipolino)
В ответ на:
но неизменны для обектов одного класса
но неизменны для обектов одного класса
Дык сам написал неизменяемая
В ответ на:
конст = не перезаписываемая
конст = не перезаписываемая
Ключевое слово mutable ;-)
В ответ на:
одно и то же значение для всех обектов (инициаций) класса
одно и то же значение для всех обектов (инициаций) класса
Может инстанций ?
ЗЫ.Постарайся сформулировать свою проблему человеческим,русским языком.
Чего , конкретно , ты хочешь добиться ?
NEW 27.12.06 18:14
in Antwort Chipolino 27.12.06 17:54
с русским языком у меня вот особенно туго
попробую обяснить в н-ый раз (может хоть сам пойму наконец)
имею задачку:
добавить в ГУИ механизм ограничения визуализации списков обэктов
обекты генерятся разными классами.
класс АКласс генерит а_ентити (добавляются в список АЛист).
класс БКласс генерит б_ентити (добавляются в список БЛист).
{пересчитал. итого 6 таких классов и соответственно 6 списков).
классы АКласс,БКласс.. наследуют от ПКласс (родительский класс). различия между дочерними классами не велико. 3-4 метода.
списки обектов да и сами обекты хранятся в файле.
результат должен выглядеть вот так:
в клиенцком модуле я добавляю кнопки-шнопки, поля ввода,
определяю параметры визуализации
(
показывать только
обьекты А с параметром икс в пределах от 5 до 8
и
обьекты Б с параметром игрек в пределах от 2 до 6
)
вот такая задачка.

попробую обяснить в н-ый раз (может хоть сам пойму наконец)
имею задачку:
добавить в ГУИ механизм ограничения визуализации списков обэктов
обекты генерятся разными классами.
класс АКласс генерит а_ентити (добавляются в список АЛист).
класс БКласс генерит б_ентити (добавляются в список БЛист).
{пересчитал. итого 6 таких классов и соответственно 6 списков).
классы АКласс,БКласс.. наследуют от ПКласс (родительский класс). различия между дочерними классами не велико. 3-4 метода.
списки обектов да и сами обекты хранятся в файле.
результат должен выглядеть вот так:
в клиенцком модуле я добавляю кнопки-шнопки, поля ввода,
определяю параметры визуализации
(
показывать только
обьекты А с параметром икс в пределах от 5 до 8
и
обьекты Б с параметром игрек в пределах от 2 до 6
)
вот такая задачка.
NEW 27.12.06 19:04
in Antwort desyman 27.12.06 18:14
Ну так пиши на немецком или английском. Можешь даже на французском, я пойму.
И где здесь параметры одинаковые для всех инстанций класса?
В ответ на:
класс АКласс генерит а_ентити (добавляются в список АЛист).
класс БКласс генерит б_ентити (добавляются в список БЛист).
в клиенцком модуле я добавляю кнопки-шнопки, поля ввода,
определяю параметры визуализации
(
показывать только
обьекты А с параметром икс в пределах от 5 до 8
и
обьекты Б с параметром игрек в пределах от 2 до 6
)
класс АКласс генерит а_ентити (добавляются в список АЛист).
класс БКласс генерит б_ентити (добавляются в список БЛист).
в клиенцком модуле я добавляю кнопки-шнопки, поля ввода,
определяю параметры визуализации
(
показывать только
обьекты А с параметром икс в пределах от 5 до 8
и
обьекты Б с параметром игрек в пределах от 2 до 6
)
И где здесь параметры одинаковые для всех инстанций класса?