C++函数重载,调用"overloaded"函数

C++ function overloading, calling "overloaded" function

本文关键字:函数 调用 overloaded 重载 C++      更新时间:2023-10-16

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

// 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?
}

是否有可能在不创建两个不同名称的单独方法的情况下完成评论中描述的内容?

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

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

应该这么做

应该工作,这是一个很好的方法,所以为什么你要寻找另一个方法?

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

你这里的一切都很好。编译器将根据参数选择最佳函数,例如:

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

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

据我所知,如果函数是在父类中定义的,那么你就不能在子类中使用相同的函数名和不同的参数而不覆盖父类函数。

如果你想使用,你必须重写父类中定义的方法,或者你需要把新函数定义的声明放在父类中。

,

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
    }
};