2011-06-04 64 views
0

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

问候

#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; 

} 

回答

5

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

可能有更深奥的方法来做到这一点,但你选择的方法是完全合理的。您选择哪个选项是基于您的程序的体系结构。

3

看上去完全合理的我。

2

您正在使用的方法不是类方法。通常,类/静态方法意味着与类的任何特定实例都没有关联的方法,而是它们与类本身相关联。在C++中,静态用于此。

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

我对代码的唯一反对意见是变量的命名。惯例是使用小写字母来表示对象/方法和大写来表示类。所以参数Boo应该被命名为boo

+1

关于类方法和实例方法的优点。 – Greg 2011-06-04 07:48:43

+0

我同意,即使更清楚地命名测试代码也是一个好主意,但我会指出命名约定不是通用的。 – Greg 2011-06-04 07:49:10

+0

@Greg,是的,他们不是普遍的。在方法中使用资本的语言/框架/书籍。但是在C++/Java/Obj-C/AS3中,这个约定大多被遵循。 – taskinoor 2011-06-04 07:51:49

相关问题