gpt4 book ai didi

c++ - 我的代码是以正确的方式使用 OOPS 概念还是我让它变得不必要的复杂?

转载 作者:太空宇宙 更新时间:2023-11-04 11:53:01 24 4
gpt4 key购买 nike

我看过很多实现 BST 的代码(在网上和一些书中)。这些代码中的大多数都具有如下结构:-

struct node{
int data;
struct node *left;
struct node *right;
};

class tree{
private:
node *root;
public:
//other helper function like insert,delete,display
};

但是如果我想以更好的方式使用 OOPS 那么我应该创建类节点{}是否正确?而不是使用结构 ???

我在下面编写了代码,根据我的说法,它以更好的方式使用了 OOPS 概念。如果您发现设计有问题,请建议我进行任何更改:-

我的代码:-

#include<iostream>
using namespace std;

class node{

private:
int data;
node *left;
node *right;
public:
node()
{
data=0;
left=NULL;
right=NULL;
}
node(int val)
{
data=val;
left=NULL;
right=NULL;
}
int getData()
{
return data;
}

node* getLeft()
{
return left;
}
node* getRight()
{
return right;
}
void setData(int val)
{
data=val;
}
void setLeft(node *l)
{
left=l;
}
void setRight(node *r)
{
right=r;
}


};


class tree{
private:
node *root;
node *insertHelper(node*,int);
void inorderHelper(node*);
public:
tree()
{
root=NULL;
}

void insert(int val)
{

if(root==NULL)
{
root=new node(val);
return;
}
insertHelper(root,val);
}
void inorder();


};

node *tree::insertHelper(node *root,int val)
{
if(root==NULL)
{
root=new node(val);
return root;
}
else
{
if(root->getData() > val)
{
root->setLeft(insertHelper(root->getLeft(),val));
}
else
{
root->setRight(insertHelper(root->getRight(),val));
}
}
}



void tree::inorder()
{
if(root)
{
inorderHelper(root);
}
}
void tree::inorderHelper(node *temp)
{
if(temp!=NULL)
{
inorderHelper(temp->getLeft());
cout<<temp->getData()<<" ";
inorderHelper(temp->getRight());
}
}

通过创建类节点{}并将左、右、数据保留为私有(private)成员,我是不是做的太多了,让事情变得复杂了,还是一个好方法???

最佳答案

BST 虽然在某些方面非常复杂,但实际上非常简单。你在做什么 - 除非绝对需要否则将所有内容设置为私有(private) - 是很好的 OOP 约定,但在这里并不是真正必要的。你有一个单一的类——这意味着继承和多态性是无关紧要的——它基本上用于一个非常简单的目的,这意味着限制访问并没有真正起到多大作用(你的代码不太可能被其他人使用谁决定任意弄乱不应该弄乱的字段)。

通过将结构设为类,您并没有失去任何功能,但您也没有真正获得任何功能。如果稍后,您甚至有计划以某种方式使用某种修改后的 BST 的暗示,一定要使用类,因为这样继承就会变得相关;但如果不是,除了样式之外,类和结构之间没有太大区别。

关于c++ - 我的代码是以正确的方式使用 OOPS 概念还是我让它变得不必要的复杂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17326461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com