2016-12-28 196 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

函數指針是正確的方法:)。我去與函數指針數組..