将类对象传递给两个对象

时间:2019-08-28 12:57:31

标签: c++ pointers

我有一个Database班。在我的班级A中,我从数据库和班级B的两个对象中创建了一个新对象。现在,我想从两个类B对象中访问数据库对象。我尝试将对象作为指针和引用传递,但是当我打印地址时,它总是不同的。

A.h级:

Database database; 
B b1; 
B b2;

A.cpp类:

b1.setDatabase(database); 
b2.setDatabase(database);

b1.insert("A"); 
b2.insert("B");
b1.insert("C");
b2.insert("D");

B.h级

Database database;

B.cpp类

void setDatabase(Database& database) { 
  this->database = database; 
}

void insert(std::string name) { 
  database.dataMap.insert({ name, 10 }); 

  std::cout << database.dataMap.size() << std::endl; 
}

Class Database.h

std::map<std::string, int> dataMap;

输出应为 1个 2 3 4

但这是

1 1个 2 2

所以我认为它不是同一对象

1 个答案:

答案 0 :(得分:4)

您正在传递参考。您正在执行的操作是复制数据库。您需要复制地址(指针):

B.h级

class B
{
private:
  Database* database; //Pointer to Database instead of actual Database object

public:
  void setDatabase(Database* database) //Pass pointer(*) instead of reference(&)
  { 
    this->database = database; // Assign pointer instead of calling the implicit copy constructor
  }

  void insert(string name) { 
    database->dataMap.insert({ name, 10 }); //Dereferencing and member access(->) instead of member access only(.)

    cout << database->dataMap.size() << endl;
  }

}

A.h级:

  Database database; 
  B b1; 
  B b2;

a.cpp类:

b1.setDatabase(&database); 
b2.setDatabase(&database);

b1.insert("A"); 
b2.insert("B");
b1.insert("C");
b2.insert("D");

Live example