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

Running class method in another class method

本文关键字:类方法 运行 另一个      更新时间:2023-10-16

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

问候

 #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++中,static用于此操作。

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

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