gpt4 book ai didi

c++ - 作为另一个类成员的对象数组指针的语法

转载 作者:行者123 更新时间:2023-11-28 06:52:06 25 4
gpt4 key购买 nike

您好,我有两个定义类的文件。在其中一个中,我尝试使用指针声明另一个类的类数组,我在语法上遇到了一些麻烦,我如何在第一个文件中声明它?提前谢谢你

第一个文件:

 #ifndef YARD_H_INCLUDED
#define YARD_H_INCLUDED
#include <iostream>

using namespace std;

class yard
{
public:
int yard_size;
car *car_array[];
int cars_in_yard;

yard();

void show() const
{
for (int i=0; i<=cars_in_yard;i++)
{
car_array[i]->show();
}
}

~yard()
{
yard_size=0;
delete car_array[cars_in_yard];
cars_in_yard= 0;
}
};
#endif // YARD_H_INCLUDED'

第二个是:

 #ifndef CAR_H_INCLUDED
#define CAR_H_INCLUDED
#include <iostream>
#include <stdlib.h>
#include <string>

using namespace std;

class car
{
public:
char car_name[80];
double price;
int eng;

car();

void show() const
{
cout<<"Car Make : "<< *car_name <<" , Price: "<< price<<" , Engine : "<< eng <<" , cc";
}
};

car::car()
{
car_name[0]=0;
price=0.0;
eng=0;
}
#endif // CAR_H_INCLUDED'

最佳答案

car *car_array[];是语法错误。数组大小必须在编译时已知。要使用运行时大小调整,您需要使用动态内存分配。

基于 Yard的析构函数;似乎这个数组中的汽车应该“属于”院子 - 即院子负责清理它们。

让 Yard 存储一个 car 的数组会更简单,而不是存储 car * 的数组.但我假设您已经决定存储 car * 的数组相反。

当然,最简单的方法是 std::vector<car*> car_array; (或者可以说是 unique_ptr 的 vector )。但是,由于您应该重新发明轮子,因此您需要执行以下操作:

  • car **car_array;
  • 在构造函数中,初始化它(可能是 nullptr )
  • 制作yard_sizecars_in_yard private - 你的 Yard 需要能够准确地跟踪正在使用的内存量
  • 每当yard_size已更新,如果它变大,您需要 new[] car * 的一些新空间'沙子从旧空间复制值,和delete[]旧空间
  • 每当cars_in_yard增加了你需要检查是否需要增加yard_size
  • 每当cars_in_yard减少了,你需要删除不再在院子里的汽车,然后将所有东西都洗牌,这样就没有间隙了(当然除非你想允许间隙,但这样你的插入逻辑就更复杂了)
  • 有一个复制构造函数,一个复制赋值运算符,要么做正确的事,要么被禁用
  • 有一个析构函数可以删除院子里的汽车以及car_array .

关于c++ - 作为另一个类成员的对象数组指针的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23764097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com