C ++:两个类之间的互连

时间:2015-04-14 10:12:19

标签: c++ class

考虑B类对象想要将其ID发送给A对象的情况。因此A的ID可以设置为B的ID。这可以视为下订单。然后 A想要给出关于其订单状态的B更新(例如,已发送的订单)。所以B需要有一个应该由A设置的属性。在下面的代码中我有第一个让B在A处下订单,但是第二个允许A给B更新的部分丢失了。我的问题是:"怎么办呢?"

class A
{
private:
    string ID;

public:
    A()
    {
        ID = "empty";
    }

    void set_ID(string id)
    {
        ID = id;
    }
};

class B
{
private:
    string B_ID;

public:
    B(string id)
    {
        B_ID = id;
    }

    void put_request(A& a)
    {
        a.set_ID(B_ID);
    }
};

int main()
{
    A a;
    B b("my ID");
    b.put_request(a);
}

3 个答案:

答案 0 :(得分:0)

我不确定,如果我理解你的问题,但是如果你因为名字定义问题而无法使它工作:

  1. 从每个班级的主体中单独实施方法。
  2. 转发声明类,定义为第二个。
  3. 此外,您可能希望为每个类声明两个变量:

    1. my_ID拥有此特定实例的ID。
    2. ID包含由put_request()设置的ID(可能最初设置为my_ID?)。
    3. 现在,代码:

      class B;
      
      class A
      {
      private:
          string my_ID;
          string ID;
      
      public:
          A()
          : my_ID("empty")
          , ID(my_ID)
          { }
      
          void set_ID(string id);
          void put_request(B& b);
      };
      
      class B
      {
      private:
          string my_ID;
          string ID;
      
      public:
          B(string id)
          : my_ID(id)
          , ID(my_ID)
          { }
      
          void set_ID(string id);
          void put_request(A& a);
      };
      
      
      void A::set_ID(string id) { this->ID = id; }
      
      void A::put_request(B& b) { b.set_ID(this->my_ID); }
      
      
      void B::set_ID(string id){ this->ID = id; }
      
      void B::put_request(A& a) { a.set_ID(this->my_ID); }
      

答案 1 :(得分:0)

您可以尝试ideone

#include <iostream>
using namespace std;

class A
{
private:
    string ID;

public:
    A()
    {
        ID = "empty";
    }

    void set_ID(string id)
    {
        ID = id;
    }

    void write_ID()
    {
        cout<<"A id : "<<ID<<"\n";
    }
};

class B
{
private:
    string B_ID;

public:
    B(string id)
    {
        B_ID = id;
    }

    void put_request(A* a)
    {
        a->set_ID(B_ID);
    }
};

int main()
{
    A a;
    a.write_ID();

    B b("my ID");
    b.put_request(&a);

    a.write_ID();
}

答案 2 :(得分:0)

最好不要将B ID发送给A类,而是给B对象指针。因此,对象可以访问B的ID以及处理请求所需的B类的其他信息。

每个对象都应该有自己的ID。您不应将A的ID替换为B的。

为了向A对象发出请求,使用B类参数调用A的方法更为明确。不是其他方式。

示例:

#include <string>
#include <iostream>
using std::string;

class B;

class A
{
private:
    string id;
    B* request;

public:
    A(const string& id)
    {
        this->id = id;
        request = NULL;
    }

    void set_request(B* request)
    {
        this->request = request;
    }

    string get_request_id() const;
};

class B
{
private:
    string id;

public:
    B(const string& id)
    {
        this->id = id;
    }

    string get_id() const
    {
        return id;
    }
};

string A::get_request_id() const
{
    if (!request)
        return string();
    return request->get_id();
}

int main()
{
    A a("A");
    B b("my ID");
    a.set_request(&b);
    std::cout << a.get_request_id() << std::endl;
}