簡體   English   中英

C ++函數重載,調用“重載”函數

[英]C++ function overloading, calling “overloaded” function

我有一些看起來像這樣的代碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM