在另一个类方法中运行类方法

时间:2011-06-04 07:17:54

标签: c++ class class-design

我想在另一个类的另一个函数方法中运行一个类的函数方法。我编写了以下代码作为示例,它编译并返回预期值。我的问题是,这是否是在另一个类方法中预先形成类方法计算的正确方法......

此致

 #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 个答案:

答案 0 :(得分:5)

有两种直接的方法可以做到这一点。其中之一,您选择的是将外部类对象传递给另一个对象方法。另一种方法是将一个对象封装在另一个对象中,并直接从封闭类的方法中调用它。

可能有更多深奥的方式来做这件事,但你选择的那个是完全合理的。您选择哪个选项取决于程序的体系结构。

答案 1 :(得分:3)

对我来说看起来非常合理。

答案 2 :(得分:2)

您使用的方法不是类方法。通常,类/静态方法是指与类的任何特定实例无关的方法,而是与类本身相关联。在C ++中,静态用于此。

您使用的方法称为实例方法。你使用它的方式非常好。而不是传递一个参数,你可以在Greg指出的类中有一个引用。这一切都取决于您的需求。如果仅在一种方法中需要该方法,或者如果您使用Boo的不同实例为CFoo.Test,则应将它们作为参数传递。但是如果您只需要Boo的一个实例,那么您可以在CFoo中创建它并在所有方法中使用它。你要做的是取决于你的需要。

我对你的代码的唯一反对意见是变量的命名。惯例是使用小写字母表示对象/方法,使用大写字母表示类。因此,参数Boo应命名为boo