如何让一个类修改指向它自己的指针,这样我就可以很容易地返回到它



你能帮我找到实现以下场景所缺少的命名法吗?

在我的程序中,我设置了以下类:

  • ";"病人";他的"有一个整数;id";,以及一个用于";疾病";。

  • "医生"他的"有一个整数;id";,以及整数的矢量";患者列表";。

后来我把一个病人的iD推到医生的向量中。

如何使用矢量的内容通过匹配ID来访问相关患者的疾病?

我想在设置Patient类时这可能是可能的,但我不知道命名法。

#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Patient{
// MAGIC PROBABLY HAPPENS SOMEWHERE HERE TO SET THE ADDRESS OF THE PATIENT EQUAL TO ITS idPatient
public :
int idPatient;
string sickness;

Patient(int idPatient, string sickness) {
this->idPatient = idPatient;
this->sickness = sickness;
}
};
class Docteur {
public :
int idDocteur;
vector <int> listePatients;
Docteur(int idDocteur)  {
this->idDocteur = idDocteur;
}
void addPatient(int idPatient) {
listePatients.push_back(idPatient);
cout << "n Patient # " << idPatient << " has been added for doctor # " << idDocteur << "n " ;
}
};
int main()
{
Docteur doc1(9999);
Patient pat1(123, "vertigo");
doc1.addPatient(123);
// HERE I NEED TO ACCESS A PATIENT'S SICKNESS ACCORDING TO HIS ID... 
return 0;
}

问题是您的程序设计方式使得您无法轻松找到具有特定ID的患者。

通过使用线路

Docteur doc1(9999);
Patient pat1(123, "vertigo");

您已经指定每个医生和每个患者都有自己的唯一标识符(变量或对象的名称(。这不是一种非常灵活的数据排列方式。

为每个类创建一个std::vector会更有意义,如下所示:

std::vector<Docteur> doctors;
std::vector<Patient> patients;

在使用push_back将医生和患者添加到两个载体后,您可以访问ID为0的第一个医生,该医生的表达式为:doctors[0],或ID为2的第三个患者的表达式为patients[2]。这假设对象的ID由向量中的位置隐含。在这种情况下,这些对象不再需要将自己的ID存储为对象的一部分,因此可以删除这些成员变量(除非您希望成员函数打印ID用于诊断目的(。只有存储在listePatients成员变量中的ID仍然需要存储。


如何使用矢量的内容通过匹配ID来访问相关患者的疾病?

如果您如上所述重新安排您的程序,如果您想访问第二位医生的第四位患者的疾病,您可以使用以下表达式访问它:

patients[doctors[1].listePatients[3]].sickness

在属于class Docteur对象的成员函数的代码中,您可以使用以下表达式访问该医生的第四位患者的疾病:

patients[this->listePatients[3]].sickness

您无法控制地址。它们是在运行时随机决定的。在堆栈上进行分配会导致对象在其开始之后的某个位置具有地址。而在堆上分配通常会返回一个相当随机的地址。

此外,对象的内部信息可以被窃取到具有不同地址的不同位置。

你有XY类型的问题。你应该为手头的问题寻找不同类型的解决方案。

相关内容

最新更新