2015-04-14 51 views
0

考慮類B的對象想要將其ID發送給A的對象的情況。所以A的ID可以設置爲B的ID。這可以被視爲下訂單。然後 A想給B關於其訂單狀態的更新(例如,訂單已分派)。所以B需要有一個應該由A設置的屬性。在下面的代碼中,我有第一個讓B向A下訂單的作品,但是第二個允許A給B更新的作品缺失。我的問題是:「如何做到這一點?」C++:兩個類之間的互連

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); 
} 
+2

你最終具有'B類的失蹤前聲明中的問題;'?否則我不能告訴你在問什麼。您在'A'中提供了另一個函數,該函數接受'B&'作爲參數,這與您在'B'中對'put_request()'所做的相同。 –

+0

作爲一個想法,試試這個:首先聲明兩個類,然後在每個類中定義另一個類的變量並與這些變量交互。 – moldovean

+0

'A'和'B'最終指向相同的ID。您可能希望在這兩個類中都有2個ID變量進行區分。 – iammilind

回答

0

我不知道,如果我理解你的問題,但如果你不能讓它工作,由於問題的名稱定義:

  1. 從每個體分離方法的實現類。
  2. 正向聲明類,即定義爲第二個。

此外,您可能希望每每個類聲明兩個變量:

  1. my_ID持有ID爲這個特殊的實例。
  2. ID保存ID,即由put_request()(可能最初設置爲my_ID?)設置。

現在,代碼:

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); } 
+0

@Adrian啊,是的,抱歉,這些錯字錯誤,現在修復。 –

+0

以上答案完整正確,謝謝Mateusz,但有一個小錯別字錯誤:在B類中,「void put_request(B & b);」,應改爲「void put_request(A & a);」。 – Adrian

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(); 
} 
0

這是最好不要到B ID發送到類,但給一個指向B對象。因此,A對象可以訪問處理請求所需的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; 
}