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使わなきゃだめらしいですね。分からんから、するーで。