✔ 最佳答案
// IDE: Visual C++
// 迴圈輸入設定值
#include <iostream>
#include <cstdlib>
#include <string>
#include <vector>
using namespace std;
// 類別名稱通常以 C 為開頭
class CDrink
{
public:
CDrink(string name, int quantity, int price)
{
this->m_name = name;
this->m_quantity = quantity;
this->m_price = price;
}
void print(void)
{
cout<<this->m_name<<", ";
cout<<this->m_quantity<<", ";
cout<<"$"<<this->m_price<<".-"<<endl;
}
private:
// 資料成員通常以 m_ 為開頭
string m_name;
int m_quantity;
int m_price;
};
// STL container
// 自 STL vector 繼承
class CVcd: public vector<CDrink>
{
public:
// 增加列印函式
void print(void)
{
// 迭代器:類似陣列的指標
for ( CVcd::iterator it = this->begin(); it != this->end(); it ++)
{
it->print();
}
}
};
typedef CVcd Vcd;
void main(void)
{
Vcd vcd;
bool bWhile = true;
// 持續輸入
while ( bWhile )
{
string name, ans;
int quantity, price;
cout<<"Input name: ", cin>>name;
cout<<"Input quantity: ", cin>>quantity;
cout<<"Input price: ", cin>>price;
// 物件放入容器儲存
vcd.push_back(CDrink(name, quantity, price));
cout<<"Continue? [Y/N]", cin>>ans;
switch ( ans[0] )
{
case 'n':
case 'N':
bWhile = false;
break;
}
}
vcd.print();
system("PAUSE");
}
2009-11-28 17:55:09 補充:
我張貼的程式碼,裡頭只用了類別與繼承,以及 STL。
在程式碼裡,我把所有的飲料(物件)集合在同一個 vector 內,其實這個 vector 與 C 語言的陣列相類似。
你要寫成 d1(飲料一)與 d2(飲料二)也是可以的,但是直接宣告成物件,或是宣告成指標,這兩種看起來其實相同,只是先 new d1,用完後還要 delete d1,多一個動作而已。
通常寫 C++ 宣告物件時,尤其是大型程式,最好是盡量避免編寫指標的部分,除非程式有特殊的需求,或是你有信心可以掌控程式整體的指標部分。