запутался в классах..
От: atrofa Украина  
Дата: 11.10.04 13:40
Оценка:
Привет

есть у меня два класса, причем один есть членном лкласса другого..
class A
{
public:
   A(){};
   metod1();
}

class B
{
public:
   B(){};
   metod2() 
   {
     a.metod1();
   };
   
   metod3();

   A a;
}

main()
{
  B b;
  b.metod2();
  ......
}

Как из метода класса А metod1() вызвать метод класса В metod3()

Раранее благодарен за ответы

Исправлено форматирование. Пожалуйста, не забывайте пользоваться тегами [c] ... [/c], [code] ... [/code] и т.п. для выделения фрагментов кода. -- ПК.
Re: запутался в классах..
От: jazzer Россия Skype: enerjazzer
Дата: 11.10.04 13:41
Оценка:
Здравствуйте, atrofa, Вы писали:

A>Привет


A>есть у меня два класса, причем один есть членном лкласса другого..


A>class A

A>{
A>public:
A> A(){};
A> metod1();
A>}

A>class B

A>{
A>public:
A> B(){};
A> metod2()
A> {
A> a.metod1();
A> };

A> metod3();


A> A a;

A>}

A>main()

A>{
A> B b;
A> b.metod2();
A> ......
A>}

A>Как из метода класса А metod1() вызвать метод класса В metod3()


Передать в класс А или в metod1 ссылку или указатель на объект класса В.
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]: запутался в классах..
От: atrofa Украина  
Дата: 11.10.04 13:46
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Передать в класс А или в metod1 ссылку или указатель на объект класса В.


Аесли у меня в metod1() создаетсья новый поток.. и все происходит в нем.. а управление возвращаеться вызывающей функции класса В
Нужно делать синхронизацию?
Re[3]: запутался в классах..
От: jazzer Россия Skype: enerjazzer
Дата: 11.10.04 13:50
Оценка: 2 (1)
Здравствуйте, atrofa, Вы писали:

A>Здравствуйте, jazzer, Вы писали:


J>>Передать в класс А или в metod1 ссылку или указатель на объект класса В.


A>Аесли у меня в metod1() создаетсья новый поток.. и все происходит в нем.. а управление возвращаеться вызывающей функции класса В

A>Нужно делать синхронизацию?

скорее всего

слишком мало информации, слишком общая постановка задачи
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[4]: запутался в классах..
От: atrofa Украина  
Дата: 11.10.04 13:58
Оценка:
Здравствуйте, jazzer, Вы писали:

J>слишком мало информации, слишком общая постановка задачи


Вообщем класс В это СОМ обект.. методы которого ассинхронные так как выполнение может быть долгим.
Сейчас у меня вся реализация в одном классе. Я хочу вынести ввсю работу в отдельный класс. А класс СОм обекта только создаст екземпляр другого класса и вызовет функцию Perform();

Так как у меня реализована еще и connection point то мне нужно вызвать метод Fire_XXXX когда работа будет закончена. А вызывать его прийдеться из класса где производились вычысления...

Может можно както лучше все сделать?

спасибо
Re[5]: запутался в классах..
От: Bell Россия  
Дата: 11.10.04 14:07
Оценка: 2 (1)
Здравствуйте, atrofa, Вы писали:

A>Здравствуйте, jazzer, Вы писали:


J>>слишком мало информации, слишком общая постановка задачи


A>Вообщем класс В это СОМ обект.. методы которого ассинхронные так как выполнение может быть долгим.

A>Сейчас у меня вся реализация в одном классе. Я хочу вынести ввсю работу в отдельный класс. А класс СОм обекта только создаст екземпляр другого класса и вызовет функцию Perform();

A>Так как у меня реализована еще и connection point то мне нужно вызвать метод Fire_XXXX когда работа будет закончена. А вызывать его прийдеться из класса где производились вычысления...


A>Может можно както лучше все сделать?


A>спасибо



class B
{
public:
   void Start();
   void OnEnd();
};

class A
{
   B* parent_;
public:
   void Calculate() { /**/ parent_->OnEnd(); }
};

void B::Start
{
   A* pa = new A();
   //Запустить pa->Calculate() в отдельном потоке.
}


ЗЫ
только не забыть позаботиться об удалении рабочего объекта А.
Любите книгу — источник знаний (с) М.Горький
Re[6]: запутался в классах..
От: Bell Россия  
Дата: 11.10.04 14:18
Оценка:
Здравствуйте, Bell, Вы писали:

Забыл про конструктор А.
Вот исправленный вариант:

B>
B>class B
B>{
B>public:
B>   void Start();
B>   void OnEnd();
B>};

B>class A
B>{
B>   B* parent_;
B>public:
     A(B* parent) : parent_(parent) {}B>   void Calculate() { /**/ parent_->OnEnd(); }
B>};

B>void B::Start
B>{
B>   A* pa = new A(this);
B>   //Запустить pa->Calculate() в отдельном потоке.
B>}
B>


B>ЗЫ

B>только не забыть позаботиться об удалении рабочего объекта А.
Любите книгу — источник знаний (с) М.Горький
Re[7]: запутался в классах..
От: atrofa Украина  
Дата: 11.10.04 14:51
Оценка:
Здравствуйте, Bell, Вы писали:

а как сделать что б в классе А обьявить указатель на экземпляр класса В а в классе В — указатель на экземпляр класса А?
Re[8]: запутался в классах..
От: jazzer Россия Skype: enerjazzer
Дата: 11.10.04 14:53
Оценка:
Здравствуйте, atrofa, Вы писали:

A>Здравствуйте, Bell, Вы писали:


A>а как сделать что б в классе А обьявить указатель на экземпляр класса В а в классе В — указатель на экземпляр класса А?


поищи по сайту forward declaration.
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[8]: запутался в классах..
От: Bell Россия  
Дата: 11.10.04 14:58
Оценка:
Здравствуйте, atrofa, Вы писали:

A>Здравствуйте, Bell, Вы писали:


A>а как сделать что б в классе А обьявить указатель на экземпляр класса В а в классе В — указатель на экземпляр класса А?



class A;
class B
{
   A* pa_;
public:
   B() : pa_(0) {}
   void Start();
   void OnEnd();
};

class A
{
   B* parent_;
public:
     A(B* parent) : parent_(parent) {}B>   void Calculate() { /**/ parent_->OnEnd(); }
};

void B::Start()
{
   pa_ = new A(this);
   //Запустить pa->Calculate() в отдельном потоке.
}

void B::OnEnd()
{
   delete pa_;
}
Любите книгу — источник знаний (с) М.Горький
Re[9]: запутался в классах..
От: atrofa Украина  
Дата: 11.10.04 15:15
Оценка:
извините что надоедаю но у меня классы реализованы в раззный файлах. И это не помогает... *.h файл компилитсья нормально а при попытке вызвать метод этого обекта или конструктора с параметрами, пишет — неизвестный метод...

спасибо
Re[10]: запутался в классах..
От: Bell Россия  
Дата: 11.10.04 15:27
Оценка:
Здравствуйте, atrofa, Вы писали:

A>извините что надоедаю но у меня классы реализованы в раззный файлах. И это не помогает... *.h файл компилитсья нормально а при попытке вызвать метод этого обекта или конструктора с параметрами, пишет — неизвестный метод...


A>спасибо



//********* B.h ***********
#if !defined B__H__
#define B__H__

class A;
class B
{
   A* pa_;
public:
   B();
   void Start();
   void OnEnd();
};

#endif //B__H__

//********* A.h ***********
#if !defined A__H__
#define A__H__

#include "B.h"
class A
{
   B* parent_;
public:
   A(B* parent) : parent_(parent) {}
   void Calculate();
};

#endif //A__H__

//********* A.cpp ***********
#include "A.h"

void A::Calculate()
{
   //...
   parent_->OnEnd(); 
}

//********* B.cpp ***********
#include "B.h"
#include "A.h"


B::B(A* pa) : pa_(0) {}

void B::Start()
{
   pa_ = new A(this);
   //Запустить pa->Calculate() в отдельном потоке.
}

void B::OnEnd()
{
   delete pa_;
}
Любите книгу — источник знаний (с) М.Горький
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.