наследование static members
От: Аноним  
Дата: 18.02.04 16:25
Оценка:
Не могу найти в стандарте где описан subj...

class Base
{ public: static int i; };
class Derived: public Base
{ ... };

Base oB;
Derived oD;

oB.i=0;
oD.i=5;

какой вариант правильный?
1 oB.i == 0
2 oD.i == 5
3 oB == oD
Re: наследование static members
От: LaptevVV Россия  
Дата: 18.02.04 16:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Не могу найти в стандарте где описан subj...


А>
А>class Base
А>{ public: static int i; };
А>class Derived: public Base
А>{ ... };

А>Base oB;
А>Derived oD;

А>oB.i=0;
А>oD.i=5;
А>

А>какой вариант правильный?
А>1 oB.i == 0
А>2 oD.i == 5
А>3 oB == oD
Base::i — по имени класса, а не объекта
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: наследование static members
От: jazzer Россия Skype: enerjazzer
Дата: 18.02.04 16:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Не могу найти в стандарте где описан subj...


А>
А>class Base
А>{ public: static int i; };
А>class Derived: public Base
А>{ ... };

А>Base oB;
А>Derived oD;

А>oB.i=0;
А>oD.i=5;
А>

А>какой вариант правильный?
А>1 oB.i == 0
А>2 oD.i == 5

оба правильны
везде ты обращаешься к одной и той же переменной.

А>3 oB == oD


естественно
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: наследование static members
От: Аноним  
Дата: 18.02.04 16:45
Оценка:
LVV>Base::i — по имени класса, а не объекта

заработался

class Base
{ public: static int i;
  virtual void seti(int i) {Base::i = i} };
class Derived: public Base
{ virtual void seti(int i) {Derived::i = i} };

int Base::i;
//int Derived::i ?????

Base oB;
Derived oD;

oB.seti(0);
oD.seti(5);

и снова не понял
Base::i == ?
Derived::i == ?
Re[3]: наследование static members
От: Кодт Россия  
Дата: 18.02.04 17:08
Оценка:
Здравствуйте, Аноним, Вы писали:

А>
А>class Base
А>{ public: static int i;
А>  virtual void seti(int i) {Base::i = i} };
А>class Derived: public Base
А>{ virtual void seti(int i) {Derived::i = i} };

А>int Base::i;
А>//int Derived::i ?????

А>Base oB;
А>Derived oD;

А>oB.seti(0);
А>oD.seti(5);
А>

А>и снова не понял
А>Base::i == ?
А>Derived::i == ?

В обоих случаях -- 5
Переменная Base::i общая для обоих классов.
Перекуём баги на фичи!
Re[3]: наследование static members
От: LaptevVV Россия  
Дата: 18.02.04 17:09
Оценка:
Здравствуйте, Аноним, Вы писали:

LVV>>Base::i — по имени класса, а не объекта

А>
А>заработался

#include <iostream>
#include <conio.h>
using namespace std;
class Base
{ public:
  static int i;
};
class Derived: public Base
{
};
int Base::i = 0;    // j,]zdktybt
int main()
{     Base::i = 1;
    cout << Base::i << endl;
    Derived::i = 2;
    cout << Derived::i << endl;
    cout << Base::i << endl;
    getch();
  return 0;
}

Работает на VC7
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: наследование static members
От: Аноним  
Дата: 18.02.04 17:29
Оценка:
Всем спасибо,
i общая для Base и Derived(
Re[4]: наследование static members
От: Кодт Россия  
Дата: 18.02.04 18:07
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Всем спасибо,

А>i общая для Base и Derived(

Почему сразу ?
Тебе нужны статические переменные уникальные для каждого класса? Ну так заведи их.
Перекуём баги на фичи!
Re[5]: наследование static members
От: Аноним  
Дата: 18.02.04 21:08
Оценка:
К>Почему сразу ?
К>Тебе нужны статические переменные уникальные для каждого класса? Ну так заведи их.

Base::i Derived::i — одно и тоже, а нужна одна сущность (одно имя i), но в Derived они не дублируются, а остаются static для всей иерархии. Мне это было не нужно. Ну, вообще то я уже извратнулся, сделав один static на всех, так что еще раз благодарю.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.