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

或者
这里写图片描述

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值