vs2010 C++ 生成類圖

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

或者
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章