C++指向基类的指针数组
C++ an array of pointers to the base class
有几个类是在不同的文件中创建的。 以下是班级名称:医院类和患者类。 基本上,对于医院类,它具有患者指针数组,可以根据患者类型存储患者信息。对于患者类(基类)有四个派生类,如下所示:男性、女性、住院、门诊。我想做的是,在医院课堂上,我想根据患者类型分配对象。
#include <iostream>
#include "Hospital.h"
#include "Female.h"
#include "Male.h"
#include "Inpatient.h"
#include "Outpatient.h"
using namespace std;
Hospital::Hospital(const char * name, int capacity)
{
hospitalName=name;
patientCapacity=capacity;
totalPatients=0;
}
void Hospital::determinePatientType()
{
int selection;
cout << "What is the patient type?" << endl;
cout << "1. Female" << endl;
cout << "2. Male" << endl;
cout << "3. Outpatient" << endl;
cout << "4. Inpatient" << endl;
cin >> selection;
if(selection==1)
{
patients = new Patient[totalPatients];
Female* female = new Female();
patients = female;
}
else if(selection==2)
{
patients = new Patient[totalPatients];
Male* male = new Male();
patients = male;
}
else if(selection==3)
{
patients = new Patient[totalPatients];
Outpatient* outpatient = new Outpatient();
patients = outpatient;
}
else
{
patients = new Patient[totalPatients];
Inpatient* inpatient = new Inpatient();
patients = inpatient;
}
totalPatients++;
}
这是我的代码,但我不确定它是否正确。 我将上传类图,以便您了解我在做什么。 提前感谢您的帮助。
在此处输入图像描述
不,你的代码不正确。
让我们看一下这个代码片段:
if(selection==1)
{
patients = new Patient[totalPatients];
Female* female = new Female();
patients = female;
}
跟
patients = new Patient[totalPatients];
分配一个totalPatients
对象的数组。你patients
指向该数组的第一个元素。
然后你做两行
patients = female;
这会重新分配变量patients
以指向单个对象female
。
您将丢失第一次分配的原始内存,这将导致泄漏。如果您随后使用delete[] patients
,则很可能也会导致未定义的行为,因为patients
不再指向数组。
除非你的练习是学习如何使用指针和动态内存分配,否则你应该使用std::vector
。
还有另一个潜在的问题,它与对象切片和多态性有关(如果类是多态的,即它们具有virtual
成员函数)。
如果你以自然的方式解决第一个问题,例如
patients[totalPatients] = female;
或者,如果您使用std::vector<Patient>
并执行简单的push_back(female)
.
然后对female
对象进行切片,并丢失特定于Female
类的所有数据。而且由于你不再有Female
对象,所有虚函数都会认为它们是在Patient
对象上调用的,这使得polymprphism也不起作用。
要解决此问题,您应该有一个指向基Patient
类的指针向量(或数组)。std::vector<Patient*>
.
或者更好的是使用像std::unique_ptr
这样的智能指针,如std::vector<std::unique_ptr<Patient>>
。
- 指向指向字符数组的指针数组的指针
- 通过指向指针数组的指针访问子类的属性
- C++,指针数组,指向双链表中的条目
- 在C++中,如何初始化指向wchar_t*的指针数组(生成wchar_t**)
- C++从函数指针数组调用函数
- 关于指向指针数组的指针
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 将链表转换为指针数组时出错
- C++ 对象指针数组的复制构造函数
- C++ - 循环访问指针数组会导致错误
- 删除指针数组 (C++) 中的元素
- 如何循环访问 cpp 中的函数返回的字符指针数组
- 将函数指针数组中的函数指针作为模板参数传递
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 具有推导参数的模板函数指针数组变量
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- C++指针数组到字符数组中的特定位置
- 如何在C++中复制指针数组的数据
- 初始化类中的指针数组,并在另一个类中检索它
- 尽管直接设置了指针数组,但仍为空