如何在函数内重新定义函数?

时间:2015-11-25 02:32:17

标签: c++ tree

也许有更简单的方法可以做到这一点,但我正在做的是编写一个由两个二进制搜索树组成的类。我使用这些树来存储包含各国奥运奖牌数的结构。这是结构:

struct Country{
    string country;
    int rank;
    int gold;
    int silver;
    int bronze;

    Country(): country(""), rank(NULL), gold(NULL), silver(NULL), bronze(NULL){}
    Country(string ncountry, int ngold, int nsilver, int nbronze): country(ncountry), rank(NULL), gold(ngold), silver(nsilver), bronze(nbronze) {}
}

然后,我想为每棵树添加一个新的国家/地区。我遇到的问题是我需要重载比较运算符(>,<,==,!=,< =,> =)才能使二进制搜索树方法起作用。这并不是特别困难,但需要对它们进行不同的定义。当我添加到国家/地区树时,我需要比较国家/地区名称,而我在添加排名树时需要比较排名。所以我希望做这样的事情:

void addNewCountry(string name, int goldMedalCount, int silverMedalCount, int bronzeMedalCount){
    //Define comparison operators to compare based on rank
    rankTree.add(CountryNode(name, goldMedalCount, silverMedalCount, bronzeMedalCount));
    //Define comparison operators to compare based on country
    countryTree.add(CountryNode(name, goldMedalCount, silverMedalCount, bronzeMedalCount));
}

通常情况下,我有多种方法,但在操作符重载最好的情况下,我无法做到这一点。感谢。

1 个答案:

答案 0 :(得分:0)

我最终做的是在操作符重载中执行指向函数的指针。这样我就可以在需要时将指针重新分配给另一个函数,从而改变函数的内部结构,而无需通过通常的通道重新定义它。这是我所做的简短演示程序:

#include <iostream>

using namespace std;

int (*pointerSwitch) (int) = NULL;

int square(int input){
    return input*input;
}

int doubleNum(int input){
    return input*2;
}

int variableFunction(int input){
    return pointerSwitch(input);
}

int main(){
    pointerSwitch = &square;
    cout << variableFunction(10) << endl;
    pointerSwitch = &doubleNum;
    cout << variableFunction(10) << endl;
}

我们运行相同的功能两次,但修改内部。输出是:

100
20