C++ C++;函数重载,调用;超载;功能

C++ C++;函数重载,调用;超载;功能,c++,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 getMovieOb

我有一些代码如下所示:

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

在不创建两个名称不同的方法的情况下,是否可以执行注释中描述的操作?

您拥有的方法非常好。编译器将根据参数选择最佳函数,例如:

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

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

您拥有的功能非常好。编译器将根据参数选择最佳函数,例如:

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

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

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


应该这样做。

假设
getMovieObject()
实际返回一个
Movie
(尽管我将
computeaverating()
更改为使用
Movie&m
以避免复制对象):


应该这样做。

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

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

如果可行的话,这是一个很好的方法,那么你为什么要寻找另一种方法呢

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

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

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

例:


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

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

例:


对这就是重载函数的用途。是的。这就是重载函数的作用。你肯定是指
const-Movie&m
?你肯定是指
const-Movie&m
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
    }
};