首页 > 解决方案 > 将类对象传递给两个对象

问题描述

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

啊课:

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");

Bh级

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; 
}

类数据库.h

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

输出应该是 1 2 3 4

但它是

1 1 2 2

所以我认为这不是同一个对象

标签: c++pointers

解决方案


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

Bh级

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;
  }

}

啊课:

  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");

活生生的例子


推荐阅读