gpt4 book ai didi

c++ - C++ 中的动态绑定(bind)?

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

我需要对 C++ 中的动态绑定(bind)进行一些说明。
我解释一下我的问题。
我必须使用二叉搜索树来实现字典。我决定也实现一个 AVL 树(自平衡二叉搜索树)。我已经成功地实现了两个类:BST(二叉搜索树)和扩展 BST 的 AVL。我的程序运行正常。
我的目标是只有一个指针,我可以从 BST 类切换到 AVL 类,询问用户“您想使用哪个结构?”在程序的开始。
其余代码是相同的,因为 BST 和 AVL 具有相同的方法名称(即使它们做不同的事情 -> 覆盖)。
我已经通过这种方式达到了我的目标:

cout << "whitch structure would you like to use? [1] for BST, [2] for AVL"; 
short choise;
cin >> choise;

BST a;
AVL b;
BST* dictionary;

if (choise == 1)
dictionary = &a;
else if (choise == 2)
dictionary = &b;
.
.
.
dictionary->doSomething();

我的问题是:
这是正确的方法吗?这是动态绑定(bind)的例子吗?

感谢您的关注,如果我没有正确解释我的问题,我深表歉意,但这是我在这个精彩网站上的第一篇文章!

最佳答案

Is this an example of dynamic binding?

假设 AVL 派生 BST,那么是的。

Is this a correct way to proceed?

假设 AVL 派生 BST,那么是的。

这是最好的方式吗?好吧,也许不是。您总是在实例化两种 树,即使只使用过一种。这看起来很浪费。

更常见的方法是实际有条件地构造它们:

std::unique_ptr<BST> dictionary;
if (choise == 1)
dictionary.reset(new BST());
else if (choise == 2)
dictionary.reset(new AVL());

// ...

assert(dictionary.get());
dictionary->doSomething();

除非您对动态分配极度过敏,或者您的系统上没有堆,或者您在某个地方的超紧循环中执行这些操作,否则这种方法更为传统。

不过,归根结底,这几乎是一回事。

关于c++ - C++ 中的动态绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23997406/

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