C ++函数重载,调用"重载"功能

时间:2014-05-01 16:15:23

标签: c++

我有一些看起来像这样的代码:

// original function
size_t computeAverageRating(Movie m) { // take a movie object
    // compute average rating
}

// override original function
size_t computeAverageRating(size_t movieIndex) { // take the index of a movie
    getMovieObject(movieIndex);

    // call original function from here?
}

是否可以执行注释中描述的内容而无需创建具有不同名称的两个单独方法?

4 个答案:

答案 0 :(得分:2)

应该有效,这是一个很好的方法,为什么你要寻找另一种方法呢?

size_t computeAverageRating(size_t movieIndex) {
    return computeAverageRating(getMovieObject(movieIndex));
}

答案 1 :(得分:1)

你所拥有的一切都很完美。编译器将根据参数选择最佳函数,例如:

size_t z;
Movie x;
size_t a = computeAverageRating(x);
size_t b = computeAverageRating(z);

将获得a的第一个函数的平均评级,然后是b的第二个函数。

答案 2 :(得分:1)

假设getMovieObject()实际返回Movie(虽然我将computeAverageRating()更改为Movie &m以避免复制对象):

size_t computeAverageRating(size_t movieIndex) { // take the index of a movie
  Movie m = getMovieObject(movieIndex);

  return computeAverageRating( m ) ;
}

应该这样做。

答案 3 :(得分:0)

据我所知,如果函数是在父类中定义的,那么在不改写父类函数的情况下,不能在子类中使用相同的函数名和不同的参数。

如果你想使用那么你必须覆盖父类中定义的方法,或者你需要将新函数定义的声明放在父类中。

例如:

class A
{
public:
    size_t computeAverageRating(Movie m) { // take a movie object
    // compute average rating
    }
};

class B:public A
{
    public:
    size_t computeAverageRating(Movie m)   //this is required
    {
        A::computeAverageRating(m);
    }
    size_t computeAverageRating(size_t movieIndex)
    {
           getMovieObject(movieIndex);
           //put your logic here
    }
};

class A
{
public:
    size_t computeAverageRating(Movie m) { // take a movie object
    // compute average rating
    }
    virtual size_t computeAverageRating(size_t movieIndex){};
};

class B:public A
{
    public:
    size_t computeAverageRating(size_t movieIndex)
    {
           getMovieObject(movieIndex);
           //put your logic here
    }
};