2016-12-28 158 views
-5

我正在学习堆数据结构,因为有两种类型的堆,我想提供一个选项供用户选择。我正在制作一个正常的程序,提供诸如插入,遍历,搜索等选项。如何使用变量调用函数?

现在为了插入到两个堆中,我做了两个函数,即min_insert()和max_insert()。

class MinHeap{ 
Node *root; 
int choice; 
void min_insert(); 
void max_insert(); 
public: 
    Heap(){ 
     root = NULL; 
     cout << "Do you want\n1.Max Heap\n2.Min Heap"; 
     } 
}; 

我想我的函数赋值给一个变量,这样我就不必写两套代码,一个对于情况1,一个用于盒2

说明: 如何我正想写代码:

Heap(){ 
    root = NULL; 
    cout << "Do you want\n1.Max Heap\n2.Min Heap"; 
    cin >> choice; 
    if(choice == 1){ 
     cout << "1.INSERT\2.SEARCH\n3.TRAVERSAL"; 
     cin >> innerChoice; 
     switch(innerChoice){ 
      case1: max_insert() ;break; 
      case2: search();break; 
      case3:traversal();break; 
     } 

    } 
    else{ 
     cout << "1.INSERT\2.SEARCH\n3.TRAVERSAL"; 
     cin >> innerChoice; 
     switch(innerChoice){ 
      case1: min_insert() ;break; 
      case2: search();break; 
      case3:traversal();break; 
     } 

    } 

} 

我想做什么:

Heap(){ 
     root = NULL; 
     cout << "Do you want\n1.Max Heap\n2.Min Heap"; 
     cin >> choice; 

     if(choice == 1){ 
     function_variable = max_insert();  
     }else{ 
      function_variable = min_insert(); 
     } 
      cout << "1.INSERT\2.SEARCH\n3.TRAVERSAL"; 
      cin >> choice; 
      switch(choice){ 
       case1: function_variable ;break; 
       case2: search();break; 
       case3:traversal();break; 
      } 

    } 

我应该怎么办?

+1

我不相信这是最好的方式去了解它,但至少你知道如何做你在问什么,阅读['std :: function '](http://en.cppreference.com/w/cpp/utility/functional/function)。如果您正在讨论实现相同接口的两个不同类,则可能需要使用继承。 – BoBTFish

回答

0

您可以使用指向成员函数的指针来提供所需的间接寻址。

void (MinHeap::* pFunc)() = &MinHeap::max_insert; 

MinHeap obj; 
(obj.*pFunc)(); 

,或者你的类

(this->*pFunc)(); 

内部的指针构件是一种选择的,即当在参考应用于类型的结果的一个目的是类的该成员。对于成员函数,可以调用这些函数。

0

函数指针是正确的方法:)。我去与函数指针数组..