【问题标题】:How to call another class's function from a class WITHOUT INHERITANCE [closed]如何从没有继承的类中调用另一个类的函数[关闭]
【发布时间】:2015-01-31 10:54:34
【问题描述】:

所以对于我们作业中的一个问题,我们的教授给了我们以下代码 sn-p 并要求我们让它运行并实现它,以便我们能够从 class1 访问 class2 的 print() 函数。

但是,我们必须在不使用两个类之间的任何继承/聚合/组合的情况下执行此操作,我遇到了麻烦。除此之外,我们可以修改任何东西以使代码可运行。感谢任何能够提供帮助的人!

#include <iostream>
using namespace std;

class class1 {
public:
    int x;
    class1()
    {
        x = 0;
    }
    void accessclass2(/* to be implemented*/)
    {
        //call the print() function from class2
    }
};

class class2 {
public:
    int y;
    class2()
    {
        y = 10;
    }
    void print()
    {
        cout << y << endl;
    }
};

int main()
{   //to be implemented; 
    //create class1 and class2 objects and access the print() function
    return 0;
}

【问题讨论】:

  • 这个问题似乎是题外话,因为它是一个要求答案的家庭作业问题。没有显示之前的工作。

标签: c++ class object member


【解决方案1】:

如果您将它们分成 .hpp 和 .cpp 文件,那么您可以转发声明 class2 并通过指针传递给 accessclass2

class1.hpp:

...
class class2;// forward declaration
...
class class1
{
    ...
    void accessclass2(class2 *x);
    ...
};

class1.cpp:

...
void class1::accessclass2(class2 *x)
{
    x->print();
}
...

【讨论】:

    【解决方案2】:
    #include <iostream>
    using namespace std;
    
    
    class class2 {
    public:
        int y;
        class2()
        {
            y = 10;
        }
        void print() const
        {
            cout << y << endl;
        }
    };
    
    class class1 {
    public:
        int x;
        class1()
        {
            x = 0;
        }
        void accessclass2(const class2 & cl2)
        {
            cl2.print();
        }
    };
    
    int main()
    {   
        class2 c2 = class2();
        class1 c1 = class1();
        c1.accessclass2(c2);
        return 0;
    }
    

    更安全的方法是将 print() 设为常量函数:void print() const {}

    并将 c2 作为 const 引用传递为 void accessclass2(const class2 & cl2)`

    【讨论】:

      【解决方案3】:

      怎么样:

      int main()
      {  
          //create class1 and class2 objects and access the print() function
          class2 c2Object;
          C2Object.print();
      
          // Oh, you want to use class2::print() from within class1? Ok:
          class1 c1Object;
          c1Object.accessclass2(&c2Object);
      }
      
      // In class2's implementation:
          void accessclass2(class2 *pClass2Object)
          {
              //call the print() function from class2
              pClass2Object->print();
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-06
        • 2020-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多