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。。。。
或者