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

C++ 在另一个类方法中运行类方法,c++,class,class-design,C++,Class,Class Design,我想在另一个类的另一个函数方法中运行一个类的函数方法。我编写了以下代码作为示例,它编译并返回预期值。我的问题是,这是否是在另一个类方法中执行类方法计算的正确方法 问候 #include <iostream> class CBoo { public: CBoo(); void Test(); void Plot(); private: int b; }; CBoo::CBoo() { b = 3; } void

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

问候

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

 }

在我看来完全合理。

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


也许有更深奥的方法可以做到这一点,但你选择的方法是完全合理的。选择哪个选项取决于程序的体系结构。

您使用的方法不是类方法。一般来说,类/静态方法指的是与类的任何特定实例不关联的方法,而是与类本身关联的方法。在C++中,静态是用于此的。 您正在使用的方法称为实例方法。你使用它的方式非常好。而不是传递参数,你可以像Greg所指出的那样在类中有一个引用。这完全取决于你的需要。如果只在一个方法中需要该方法,或者如果要使用Boo is CFoo.Test的不同实例,则应将它们作为参数传递。但是如果您一直只需要一个Boo实例,那么您可以在CFoo中创建它,并在所有方法中使用它。你将做什么取决于你的需要


我对您的代码唯一的异议是变量的命名。惯例是用小写字母表示对象/方法,用大写字母表示类。所以参数Boo应该被命名为Boo。

对于类方法和实例方法来说,这是一个很好的观点。我也同意,即使对测试代码进行更清晰的命名也是一个好主意,尽管我要指出命名约定不是通用的。@Greg,是的,它们不是通用的。有些语言/框架/书籍在方法中使用了大写字母。但在C++/Java/Obj-C/AS3中,这一约定大部分是遵循的。