我想在另一个类的另一个函数方法中运行一个类的函数方法。我编写了以下代码作为示例,它编译并返回预期值。我的问题是,这是否是在另一个类方法中预先形成类方法计算的正确方法......
此致
#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;
}
答案 0 :(得分:5)
有两种直接的方法可以做到这一点。其中之一,您选择的是将外部类对象传递给另一个对象方法。另一种方法是将一个对象封装在另一个对象中,并直接从封闭类的方法中调用它。
可能有更多深奥的方式来做这件事,但你选择的那个是完全合理的。您选择哪个选项取决于程序的体系结构。
答案 1 :(得分:3)
对我来说看起来非常合理。
答案 2 :(得分:2)
您使用的方法不是类方法。通常,类/静态方法是指与类的任何特定实例无关的方法,而是与类本身相关联。在C ++中,静态用于此。
您使用的方法称为实例方法。你使用它的方式非常好。而不是传递一个参数,你可以在Greg指出的类中有一个引用。这一切都取决于您的需求。如果仅在一种方法中需要该方法,或者如果您使用Boo
的不同实例为CFoo.Test
,则应将它们作为参数传递。但是如果您只需要Boo
的一个实例,那么您可以在CFoo
中创建它并在所有方法中使用它。你要做的是取决于你的需要。
我对你的代码的唯一反对意见是变量的命名。惯例是使用小写字母表示对象/方法,使用大写字母表示类。因此,参数Boo
应命名为boo
。