[英]c++ - set object to array of pointers to the class of the object
我有一个类名 MyDate 具有以下成员和方法:
class MyDate
{
public:
MyDate();
void setDay(int d);
void setMonth(int m);
void setYear(int y);
void set(int day_, int month_, int year_);
void print ();
private:
int day;
int month;
int year;
};
我有另一个类名 Calendar,它有一个指向 MyDate 的指针数组。
class Calendar
{
public:
Calendar() ;
void setDate (int num);
bool isFree(int num_);
int firstFree();
void insertDate(MyDate my_date_);
void print ();
private:
std::array<MyDate*, 30> m_dates;
};
我通过以下方式实现插入功能:
void Calendar :: insertDate(MyDate my_date)
{
int f = firstFree()-1 ;//the first free index in the array
*m_dates[f]=my_date; //is there a way to implement it without getters from //MyDate class??
}
我知道我不能做*m_dates[f]=my_date;
---> 只是为了解释我必须实现的内容。 有没有办法在没有 MyDate 类的 getter 的情况下实现它?
你不能使用*m_dates[f]=my_date;
因为数组只有指针,所以你仍然需要为实际的对象提供存储空间。 如果您可以并且想要使用智能指针数组( std::array<std::shared_ptr<MyDate>, 30> m_dates;
),您可以使用m_dates[f].reset(new MyDate(my_date));
,否则你必须照顾内存管理。
首先,您的数组保持指向 mydate 对象的指针,您必须正确管理数据。 如果我查看用于 insertDate 的接口,insertDate(myDate *my_date) 就很清楚了,您可以简单地使用 m_dates[f]=my_date 将值设置为数组。 如果您打算保留指针,您可能必须确保在程序和 myData 对象期间设置有效的指针得到正确管理。 正如在 C++11 中的一条评论中提到的,您可以利用 shared_pointers 这样您就不必显式管理内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.