2013-12-15 2 views
-3

Скажем, например, у меня есть два класса.Является ли эта плохая практика или нормальная?

Я знаю, что один путь - передать указатель на объект Foo в конструкторе, а затем использовать его внутри Object, но это хороший способ приблизиться к вещам?

Есть ли что-то более подходящее? Спасибо.

class Object 
{ 
private: //etc 

public: 
    void doStuff() 
    { 
     //access the foo object (x) created in main. 
    } 
}; 

class Foo 
{ 
private: //etc 

public: 
    void function() 
    { 
     Object * obj = new Object(); 
     obj->doStuff(); 
    } 
}; 


int main(int args, char**argv) 
{ 
    Foo * x = new Foo(); 
    x->function(); 

    return 0; 
} 
+0

Почему вы не используете наследование? – Cristy

+0

Что вы пытаетесь сделать? Все, что я вижу, это ваш основной, создавая экземпляр Foo, а затем вызывающий функцию. В этой функции вы создаете экземпляр объекта и затем вызываете функцию. В чем вопрос? –

+0

«один путь» --- один способ сделать что? «приблизиться к вещам» --- какие вещи? Кроме того, утечка памяти, безусловно, очень плохая практика. –

ответ

0

Это зависит от того, что вы должны делать. Если ваш метод doStuff() должен знать содержимое данного объекта, вы не можете использовать этот способ. В противном случае, если вы, как и в приведенном выше примере, ваш метод doStuff должен только создать объект для выполнения внутренней операции, вы можете использовать этот подход.

Как правило, нет лучшего или худшего способа работы. Это всегда зависит.

Пример. Ваш метод DoStuff что-то из внешнего необходим для того, чтобы сделать что-то:

class Foo 
{ 
private: //etc 

public: 
    void function(Object* obj) 
    { 
     obj->doStuffWithTheGivenObject(); 
    } 
}; 
} 

Ваш метод DoStuff ничего не нужно от внешнего: класса Foo { частное: // и т.д.

public: 
    void function() 
    { 
     Object* obj = new Object(); 
     obj->doStuffModifyingTheGivenObject(); 
     this->doStuffOnThisFooObjectWithTheJustCreatedObject(obj); 
    } 
}; 
} 

В во втором случае ваш объект Foo не нуждается в объекте, потому что он может самостоятельно создать объект сам по себе для его внутреннего использования. В первом случае вместо этого он ждет объекта, потому что он использует тот, который делает что-то.

Разница остается в: «Нужен ли мне объект, или я могу создать его внутри?»

+0

«Если ваш метод doStuff() должен знать содержимое данного объекта, вы не можете использовать этот способ». --- = - = - = Что вы предлагаете? – user1255454

+0

См. Пример – Massimo

+0

Ну, да - это то, что я имел в виду, передавая указатель. Поэтому мои предположения были верны. Это все, что я хотел прояснить - большое вам спасибо. – user1255454

0

Это может помочь узнать, что такое «Foo» и «Object» на самом деле. Если «Объект» на самом деле «Фрукты» и «Фу» - это «Яблоко», чем наследование имеет смысл. Альтернативно, если «Объект» представляет какой-то поток, а «Foo» представляет класс, который зависит от потока, то то, что вы делаете, имеет смысл. Его все будет зависеть от того, что вы пытаетесь выполнить здесь.

Смежные вопросы