面向对象的编程错误?

时间:2014-02-12 11:55:19

标签: c++ class oop templates struct

我对我的作业提出了一个问题,我需要用C ++做一个项目,我需要使用面向对象的编程,这是一个带有二叉搜索树的词汇表,我完成了它。但我使用结构...用它打破OOP规则?如果是,我如何在继承的类中转换结构?

template <typename T>
struct BinaryNode
{
    T key;
    BinaryNode<T>* left;
    BinaryNode<T>* right;
    BinaryNode<T>* parent;
};

template <typename T>
class BinarySearchTree
{
private:
    BinaryNode<T>* root;
    BinaryNode<T>* newNode(T key);
public:
    BinarySearchTree();
    ~BinarySearchTree();

    void insert(T key);
    BinaryNode<T>* search(T key);
    void distance(T key);
    void inorderTreeWalk();

    void insert(BinaryNode<T>** node, T key);
    BinaryNode<T>* search(BinaryNode<T>* node, T key);
    void distance(BinaryNode<T>* node, T key);
    void inorderTreeWalk(BinaryNode<T>* node);
    BinaryNode<T>* remove(BinaryNode<T>* node);

    BinaryNode<T>* minimum(BinaryNode<T>* node);
    BinaryNode<T>* maximum(BinaryNode<T>* node);
    BinaryNode<T>* successor(BinaryNode<T>* node);
    bool contains(T key);

    BinaryNode<T>* getRoot();
};

3 个答案:

答案 0 :(得分:3)

不,您不会使用struct“破坏”OOP规则。

在C ++中structclass es基本相同,唯一的区别是其成员的默认可见性。 (class es成员默认是私有的,而struct成员默认是公开的。)

答案 1 :(得分:1)

不,不。

在您的示例中,您可以更改类的结构,并且您不会遇到任何问题(修改属性的可见性或创建新方法来访问/修改它们)。

答案 2 :(得分:1)

您没有违反OOP规则。但是因为struct BinaryNode仅在BinarySearchTree类的上下文中使用,所以最好使它成为嵌套类,这样就会隐藏你实现BinarySearchTree类的内部:

template <typename T>
class BinarySearchTree
{
private:
    template <typename T> struct BinaryNode
    {
        T key;
        BinaryNode<T>* left;
        BinaryNode<T>* right;
        BinaryNode<T>* parent;
    };
...