简体   繁体   中英

pointer to string that can be used to dynamically allocate array of strings

Im writing a project and its for a car lot and im creating classes. I need to fullfill certain requirements. For accessory descriptions I need to use a pointer to a string that can be used to dynamically allocate an array of strings with the exact number of accessories. Each element will hold the name of the accessory.

If the number of accessories is 0, there is no need to allocate space, set the pointer to null.

And also pointer to a double that can eb used to dynamically allocate an array of doubles with the same number of elements as accessories. Each element will hold the cost of the associated accessory, that is, the cost in element 0 is the cost of the accessory in element 0. If the number of accessories is zero, set the pointer to null since there is no need to allocate space.

Heres what my class is so far without those last two requirements. Im stumped.

#ifndef VEHICLE_H

#define VEHICLE_H

class Vehicle

{
    public:
        Vehicle();

    protected:
        int vin_number;
        string manufacturer;
        string model;
        string color;
        double basecost;
        int accessories;
        string accessory_list;


    private:
};

#endif // VEHICLE_H

Please help it's an online course and ive been googling and reading for hours.

You should not dynamically allocate an array of string .

If you decide to use C++, you should be using STL and collections. Like this:

std::list<std::string> accessory_list;

If you decide to use C, a dynamically allocated string list could look like this:

//init
int accessory_count = 0;
int accessory_cap = 20;
char** accessory_list = calloc (sizeof(char*), accessorry_cap);

//add:
if (accessory_count==accessory_cap) {
  accessory_cap += 20;
  accessory_list = realloc (accessory_list, sizeof(char*)* accessorry_cap);
}
accessory_list[accessory_count++] = new_accessory.

If you really need a dynamic array of strings, you can do:

int accessory_arr_cap = 20;
string* accessory_arr = new string[accessory_arr_cap];

But since there is no realloc possible in this case, you will have to copy the entire array into new one if you need to enlarge it.

If the cost and name of the option are related, put them in a struct:

struct Option
{
    char* Name;
    double price;
}

Than what you are looking for is a collection, perhaps a std::vector<Option> . I'll leave it up to you to google the std::vector, it's a good learning exercise.

On a side note, do you have to use C++? You might find another language like C#, or Java a little easier to learn to program with.

If you can't use vectors, make your own collection. I won't post the code because I sense this is an assignment but here's how they normally work:

  • instantiate with a default size array of say 10.
  • keep a variable with this max in it
  • keep a variable with the current number of items in it (starts at 0, maybe call it count or something)
  • when you add a pointer, put it in element 'count' and increment the counter
    • if count = capacity then allocate a new array 2*capacity, copy all elements into it, delete the old one and assign the new array to the variable that was the old array.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM