Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Проблема с атрибутами класса


Автор: MystDeim 20.12.2007, 17:32
Есть 2 класса:
Memory и Kernel

Код

class Memory {
        public:
                Memory();
                Kernel K;
                int getfree();
                int free;
};


Подскажите, как можно получить доступ к объекту Memory из Kernel.

Автор: zkv 20.12.2007, 17:39
Цитата(MystDeim @  20.12.2007,  17:32 Найти цитируемый пост)
Подскажите, как можно получить доступ к объекту Memory из Kernel. 

можно передавать ссылку на Memory при создании объекта Kernel. 
но я на вашем месте постарался бы избегать таких конструкций.

Автор: MystDeim 20.12.2007, 18:10
Напишите, пожалуйста код, уже час над этим мучаюсь, насчёт задание, так требуется сделать в лабах!

Автор: Alek86 20.12.2007, 18:20
типа того

Код


class Memory;      // объявление класса

class Kernel {
  public:
    Kernel(Memory* p_mem) : mp_mem(p_mem) {}
// ...
  private:
    Memory * mp_mem; // указатель на того, кто этот класс содержит
};

class Memory {
   public:
     Memory() : K(this) {}
     Kernel K;
     int getfree();
     int free;
};



возможны опечатки

Автор: MystDeim 20.12.2007, 18:41
кучу ошибок выдаёт :(

Автор: Alek86 20.12.2007, 18:42
какие и где?

Автор: MystDeim 20.12.2007, 19:44
Извиняюсь, если пишу как вы мне подсказали, всё работает без ошибок.

Но у меня будет свой конструктор.
Я пишу так 
Код

class Kernel {
        public:
                Kernel(Memory* p_mem) : mp_mem(p_mem);
                bool startProcess(int size);
                bool killProcess(Process *p);
        private:
                int kid;
                int table;
                Memory * mp_mem;
};
Kernel::Kernel(Memory* p_mem) {
        kid = 0;
        table = 0;
}



Автор: Alek86 20.12.2007, 19:49
Код
Kernel(Memory* p_mem) : mp_mem(p_mem);
 так нельзя

Код
: mp_mem(p_mem)
 - деталь реализации


Код

class Kernel {
        public:
                Kernel(Memory* p_mem);
                bool startProcess(int size);
                bool killProcess(Process *p);
        private:
                int kid;
                int table;
                Memory * mp_mem;
};
Kernel::Kernel(Memory* p_mem)  : mp_mem(p_mem){
        kid = 0;
        table = 0;

}

Автор: MystDeim 20.12.2007, 21:32
Спасибо, теперь ошибок нет!

Код

: mp_mem(p_mem)


Честно говоря, не понимаю что это такое, не подскажешь материала, в своей книжке не нашел такой конструкции.

Автор: nickless 20.12.2007, 21:39
Цитата(MystDeim @  20.12.2007,  19:32 Найти цитируемый пост)
Честно говоря, не понимаю что это такое, не подскажешь материала, в своей книжке не нашел такой конструкции. 

Это http://www.google.com/search?q=%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA+%D0%B8%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8+c%2B%2B

Автор: MystDeim 20.12.2007, 22:08
Спасибо, что помогли!
Надеюсь к понедельнику допишу лабы! smile

Автор: MystDeim 21.12.2007, 17:33
Чтобы не создавать новую тему спрошу здесь.

Код

class Dispatcher {
        public:
                Dispatcher();
                Memory M;
                Device Dev();
                Controller C(&M);
};
class Controller {
        public:
                Controller(Memory *M);
                void manage(int prer);
        private:
                int prer;
                Memory *M;

};
Dispatcher D;


При попытки обратится к этой функции

Код

        D.C.manage(500);


Пишет ошибку, не пойму в чём дело :(

Автор: Fazil6 21.12.2007, 18:04
Цитата(MystDeim @  21.12.2007,  17:33 Найти цитируемый пост)
Пишет ошибку, не пойму в чём дело :(

можешь впадать в отчаяние... 

Автор: Alek86 21.12.2007, 18:51
Fazil6, добрый совет smile


MystDeim, что это?
Код

Controller C(&M);


лучше не в отчаяние впадай, а почитай книжку про классы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)