http://stackoverflow.com/questions/13452507/visual-studio-generate-uml-from-a-c-project
寫完幾個類:
#include <iostream>
#include<vector>
using namespace std;
// pizza餅
class Pizza
{
string name; // 名稱
string dough; // 醬料類型
string sauce; // 佐料
vector<string> toppings;
public:
Pizza()
{
name = "Pizza";
dough = "Dough";
sauce = "Sauce";
}
void prepare()
{
cout << "Preparing " << name.c_str() << endl;
cout << "Tossing dough " << endl; // (輕)拌 面
cout << "Adding sauce... " << endl;
cout << "Adding toppings: " << endl;
for (int i = 0; i < int(toppings.size()); ++i)
{
cout << " " << toppings[i].c_str() << endl;
}
}
void bake()
{
cout << "Bake for 25 minutes at 350" << endl;
}
void cut()
{
cout << "Cutting the pizza into diagonal slices" << endl;
}
void box()
{
cout << "Place pizza in official PizzaStore box" << endl;
}
string getName()
{
return name;
}
void setName(string str = "defalut popular pizza")
{
name = str;
}
void setDough(string str)
{
dough = str;
}
void setSauce(string str)
{
sauce = str;
}
void addTopping(string str)
{
toppings.push_back(str);
}
};
// 紐約風味pizza
class NYStyleCheesePizza : public Pizza
{
public:
NYStyleCheesePizza()
{
setName("NY Style Sauce and Cheese Pizza");
setDough("Thin Crust Dough");
setSauce("Marinara Sauce");
addTopping("Grated Reggiano Cheese"); // 意大利reggiano(rɛˈdʒɑːnoʊ)高級乾酪
}
void cut()
{
cout << "Cutting the pizza into square slices....." << endl;
}
};
class NYStyleVeggiePizza : public Pizza
{
public:
NYStyleVeggiePizza()
{
setName("NY Style Sauce and Veggie Pizza");
setDough("Thin Crust Dough");
setSauce("Marinara Sauce");
addTopping("Grated Reggiano Cheese");
addTopping("Garlic");
addTopping("Onion");
addTopping("Mushrooms");
addTopping("Red Pepper");
}
};
// pizza店
class PizzaStore
{
vector<Pizza *>pizzas;
public:
/*
orderPizza()並不知道真真在創建的pizza是哪一種,
它只知道這個pizza可以被準備、烘烤、切片、裝盒
*/
Pizza *orderPizza(string type)
{
Pizza *pizza = createPizza(type);
if (pizza == NULL)
{
pizza = new Pizza();
}
pizza->prepare();
pizza->bake();
pizza->cut();
pizza->box();
pizzas.push_back(pizza);
return pizza;
}
//歷史訂單
vector<Pizza*> getOrderHistory()
{
return pizzas;
}
// 工廠方法用來處理對象的創建,並將這樣的行爲封裝在子類中。
// 這樣,客戶程序中關於超類的代碼就和子類對象創建代碼解耦了
// abstract Product factoryMethod(string type);
// PizzaStore的子類在createPizza方法中,處理對象的實例化
virtual Pizza *createPizza(string type) = 0;
~PizzaStore()
{
for (int i = 0; i < int(pizzas.size()); i++)
{
delete pizzas[i];
pizzas[i] = NULL;
}
}
};
class NYPizzaStore : public PizzaStore
{
public:
Pizza * createPizza(string str)
{
if (strcmp(str.c_str(), "cheese") == 0)
{
return new NYStyleCheesePizza();
}
else if (strcmp(str.c_str(), "veggie") == 0)
{
return new NYStyleVeggiePizza();
}
else
{
return NULL;
}
}
};
int main()
{
cout << "I am in New York Pizza Store: " << endl << endl;
PizzaStore *nyStore = new NYPizzaStore();
Pizza *pizza;
pizza = nyStore->orderPizza("cheese");
cout << "\n*********Odering pizza : " << pizza->getName().c_str() << "*********\n" << endl; // 奶油味
// 獲取訂購的pizza類型
pizza = nyStore->orderPizza("veggie");
cout << "\n*********Odering pizza : " << pizza->getName().c_str() << "*********\n" << endl; // 蔬菜
// 或者這樣
cout << "\n*********Odering pizza : " << nyStore->orderPizza("fruit")->getName().c_str() << "*********\n" << endl; // 默認
// 歷史訂單
cout << "Order History: \n";
vector < Pizza* > orderHistory = nyStore->getOrderHistory();
for (int i = 0; i < int (orderHistory.size()) ; ++i)
{
cout << orderHistory[i]->getName().c_str() << endl;
}
return 0;
}
輸出:
I am in New York Pizza Store:
Preparing NY Style Sauce and Cheese Pizza
Tossing dough
Adding sauce...
Adding toppings:
Grated Reggiano Cheese
Bake for 25 minutes at 350
Cutting the pizza into diagonal slices
Place pizza in official PizzaStore box
*********Odering pizza : NY Style Sauce and Cheese Pizza*********
Preparing NY Style Sauce and Veggie Pizza
Tossing dough
Adding sauce...
Adding toppings:
Grated Reggiano Cheese
Garlic
Onion
Mushrooms
Red Pepper
Bake for 25 minutes at 350
Cutting the pizza into diagonal slices
Place pizza in official PizzaStore box
*********Odering pizza : NY Style Sauce and Veggie Pizza*********
Preparing Pizza
Tossing dough
Adding sauce...
Adding toppings:
Bake for 25 minutes at 350
Cutting the pizza into diagonal slices
Place pizza in official PizzaStore box
*********Odering pizza : Pizza*********
Order History:
NY Style Sauce and Cheese Pizza
NY Style Sauce and Veggie Pizza
Pizza
視圖 —-> 類視圖
Ctrl+Shift+C 快捷鍵即可呼出。
選擇所有類:
在亮藍色區域右鍵單擊 –》選擇 “查看類圖(D)”
OOOOOOOOOOOOOOOOOK。。。。
或者