2013-05-06 51 views
-6

我很热衷于创造一个汽车登记程序:C++ BST和文件处理

为用户添加,删除,查找,编辑

菜单(改变对汽车的特定细节)汽车,并查看所有的车。然后使用二叉搜索树将其存储在内存中。所有的汽车都将从内存中写入一个csv文件。在装载系统时也应该读回所有的车辆

汽车有2种类型的汽油和电动。 每一辆汽车都有属性车ID,所有者,品牌,型号,号牌 汽油车已经属性英里,充值 电动车有属性力量,英里

class car 
{ 
string id 
string owner 
string make 
string model 
string numberplate 
virtual getkey()//gets key being searched etc. 
readfile(); 
writefile(); 
}; 

class petrol : public car 
{ 
string miles 
string topup 
}; 

class electric : public car 
{ 
string power 
string miles 
}; 


data structure: 

class node 
{ 
car *ptr 
node *left 
node *right 
}; 

class tree 
{ 
///insert delete etc. 
}; 

这会是一个实用的一流的设计和哪些功能可能需要包含?

+0

一个更实用的设计会应该为BST的数据字段使用模板。 – 2013-05-06 18:53:31

+0

请你能详细说明,所以我将不得不模板的功能? – user2355449 2013-05-06 18:58:39

+0

请参阅下面的答案。 – 2013-05-06 19:03:52

回答

0

初始BST和链接列表实现的问题是,它们要么迫使您使用特定的数据类型,要么继承该数据类型(如您的数据类型)。如果我想要一个水果BST,我不能使用你的树,因为你的树专用于汽车。

我建议一个抽象节点类和节点类派生的数据类:

struct Node 
{ 
    boost::shared_ptr<Node> left; 
    boost::shared_ptr<Node> right; 

    // Interface functions for descendants 
    virtual bool is_less_than(boost::shared_ptr<Node> other_node) const = 0; 
    virtual bool is_equal_to(boost::shared_ptr<Node> other_node) const = 0; 
}; 

我仍然认为,最好的设计是使用模板:

template <class User_Data_Type> 
class Node 
{ 
    public: 
    boost::shared_ptr<Node> left; 
    boost::shared_ptr<Node> right; 
    User_Data_Type   m_data; 
}; 
+0

好的,我会玩一玩。谢谢 – user2355449 2013-05-06 19:30:50

+0

@ user2355449:如果答案有用,请点击复选标记。 – 2013-05-06 22:07:22