2:複数の注文に対応する。
動的にメモリを確保する練習というか、復習。
int main() { //intの大きさのメモリを確保する。 //メモリの位置はnewが返してくれるので、ポインタに入れておく。 Product* p = new Pruduct; //本来ならば、(*p).Disp()のような形でアクセスしなければならない。 //しかし、シンタックスシュガーが用意されていて、 //それがほかならぬ->というわけ。 p->Disp(); }
なぜ、ポインタにする必要があるかというと、渡すデータ量が少なくて済むからです。
それを踏まえて、実践講座2へとすすむ。
//List[1]とかなら、Product* 型になるが、 //Listとなっているため、ポインタがもう一つ付着する。 //よって、Product* Listではなく、 //Product** Listとなる。 // void Perchase(Product** List, int* QuantityList, int size) { for(int i = 0; i < size; i++) { List[i]->SellProduct(QuantityList[i]); } } int main() { Product* apple = new Product(300, 400, 30); Product* banana = new Product(200, 300, 50); Product* ProductList = {apple, banana}; const int size = sizeof ProductList / sizeof *ProductList; int amount[] = {3, 7}; Perchase(ProductList, amount, size); delete apple; delete banana; // これでもいいよ。 // for(int i = 0; i < size; i++) { // delete ProductList[i]; // } }
赤の部分には注意。
さて、追加注文されたとしましょう。
int main() { Product* apple = new Product(300, 400, 30); Product* banana = new Product(200, 300, 50); Product* ProductList = {apple, banana}; const int size = sizeof ProductList / sizeof *ProductList; int amount = {3, 7}; Product* tomato = new Product(30, 50, 15); Perchase(ProductList, amount, size); }
こういうかんじ。とすると、Product*型のtomatoをProductListに加えたくなります。
どうやればいいの?
realloc( )に相当する C++ の演算子または関数はあるのでしょうか? 答えは「なし」です。
std::vector<>::resize() >Is it safe to "realloc"ate memory allocated using new operator ? Don't use 'new'.
らしいので、
STL使わなきゃだめらしいですね。分からんから、するーで。