Запуск метода класса в другом методе класса - PullRequest
0 голосов
/ 04 июня 2011

Я хотел бы запустить метод функции класса внутри другого метода функции другого класса. Я написал следующий код в качестве примера, и он компилирует и возвращает ожидаемые значения. У меня вопрос, является ли это правильным способом предварительного вычисления метода класса в другом методе класса ...

Привет

 #include <iostream>

 class CBoo {
 public:
     CBoo();
     void Test();
     void Plot();

 private:
     int b;
 };

 CBoo::CBoo() {
     b = 3;
 }

 void CBoo::Test() {
     b++;
 }

 void CBoo::Plot() {
     std::cout << "b: " << b << std::endl;
 }

 class CFoo {
 public:
     CFoo();
     void Test( CBoo &Boo );
     void Plot();

 private:
     int a;
 };

 CFoo::CFoo() {
     a = 3;
 }

 void CFoo::Test( CBoo &Boo ) {

     for ( int i = 0 ; i < 10 ; i++ ) {
              a++;
              Boo.Test();
     }
 }

 void CFoo::Plot() {
     std::cout << "a: " << a << std::endl;
 }

 int main( ) {

    CFoo Foo;
    CBoo Boo;

    Foo.Test( Boo );

    Foo.Plot();
    Boo.Plot();

    return 0;

 }

Ответы [ 3 ]

5 голосов
/ 04 июня 2011

Есть два простых способа сделать это.Одним из них, который вы выбрали, является передача объекта внешнего класса другому методу объекта.Другой заключается в том, чтобы инкапсулировать объект внутри другого объекта и вызывать его напрямую из метода включающего класса.

Возможно, существуют более эзотерические способы сделать это, но тот, который вы выбрали, вполне оправдан.Какой вариант вы выберете, зависит от архитектуры вашей программы.

3 голосов
/ 04 июня 2011

выглядит вполне разумно для меня.

2 голосов
/ 04 июня 2011

Метод, который вы используете, не является методом класса. В целом, класс / статический метод означает методы, которые не связаны с каким-либо конкретным экземпляром класса, скорее они связаны с самим классом. В C ++ для этого используется static.

Метод, который вы используете, называется методом экземпляра. То, как вы использовали это прекрасно. И вместо передачи параметра вы можете иметь ссылку в классе, как указано Грегом. Все зависит от ваших потребностей. Если метод требуется только в одном методе или если вы используете разные экземпляры Boo, это CFoo.Test, то вы должны передать их в качестве параметра. Но если вам нужен только один экземпляр Boo все время, вы можете создать его в CFoo и использовать его во всех методах. То, что вы будете делать, зависит от ваших потребностей.

Единственное, что я возражаю против вашего кода, это присвоение имени переменной. Соглашение состоит в том, чтобы использовать строчную букву для обозначения объектов / методов и верхнюю букву для обозначения класса. Поэтому параметр Boo должен называться boo.

...