c++ - 将类对象传递给两个对象
问题描述
我有一堂课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
所以我认为这不是同一个对象
解决方案
您正在传递参考。你正在做的是复制你的数据库。您需要复制地址(指针):
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");
推荐阅读
- arrays - 使用 MongoDB `$in` 运算符转换和传入数字数组
- synchronization - 在 Google Colab 中操作后,无法通过本地 Jupyter Notebook 打开大型 Jupyter Notebook 文件
- java - 通过 Ajax 向 servlet 发送请求(非 spring)
- laravel - 将可变表单刀片模板传递给vue组件
- sql-server - SQL Server 表触发器未插入值
- docfx - 为什么在使用docfx.json 中指定的自定义模板进行构建时,docfx 没有应用我的自定义模板文件?
- angular - p-calendar 无法通过 formControlName 修补时间值
- vue.js - 故事书/vue 的故事镜头因错误模块未找到而损坏:错误:无法解析“fs”
- swift - 快速将表格视图添加到表格视图单元格
- ruby - Ruby AWS 开发工具包 - 在没有 mfa 令牌的情况下使用 Aws::AssumeRoleCredentials