Создайте прототип функции перегрузки c++

0

Вопрос

Я хочу создать функцию перегрузки с прототипом на C++.

#include <iostream>

using namespace std;

int rectangle(int p, int l);

int main() {
    cout << rectangle(3);
    return 0;
}

int rectangle(int p) {
    return p*p;
}

int rectangle(int p, int l) {
    return p*l;
}

Я получил ошибку в

int rectangle(int p, int l);

возможно ли создать прототип с функцией перегрузки? если возможно, как это сделать

c++ function overloading
2021-11-24 03:34:09
1

Лучший ответ

1

Вы должны объявить функцию, прежде чем использовать/вызывать ее. Вы действительно объявили версию с 2 аргументами rectangle функция, но вы, кажется, забыли объявить версию с 1 аргументом, принимающую версию.

Как показано ниже, если вы добавляете объявление для версии с 1 аргументом, то ваша программа работает(компилируется).

#include <iostream>
using namespace std;

//declare the function before main
int rectangle(int p, int l);
int rectangle(int p);//ADDED THIS DECLARATION
int main() {
    cout << rectangle(3);
    return 0;
}
//define the functions after main
int rectangle(int p) {
    return p*p;
}
int rectangle(int p, int l) {
    return p*l;
}

Результаты работы программы можно посмотреть здесь.

Альтернативное решение:

Если вы не хотите объявлять каждую функцию отдельно, вам следует просто определить их перед main, а не объявлять их, как показано ниже.

#include <iostream>
using namespace std;

//define the functions before main. This way there is no need to write a separate function declaration because all definition are declarations
int rectangle(int p) {
    return p*p;
}
int rectangle(int p, int l) {
    return p*l;
}

int main() {
    cout << rectangle(3);
    return 0;
}

2021-11-24 03:58:54

"Вы должны объявить функцию перед использованием/вызовом". - В качестве альтернативы, просто определите функцию перед ее использованием без отдельного объявления. Для однофайловых программ прямое объявление необходимо только в том случае, если существует взаимная зависимость.
Dai

значит, мне нужно такое же количество прототипов, как и функции перегрузки?
Hanif Ramadhani

@HanifRamadhani или поставьте все свои функции перед основными. Используйте прямое объявление, если оно вам действительно не нужно.
Louis Go

@HanifRamadhani Если вы не хотите объявлять каждую функцию отдельно, вы можете просто определить их перед main, как я сделал в своем альтернативном решении. Проверьте альтернативное решение, которое я добавил в свой ответ.
Anoop Rana

@ХанифРамадхани, пожалуйста. Можете ли вы отметить мой ответ как правильный, если он вам помог?
Anoop Rana

Я бы даже изменил порядок перегрузки и позвонил rectangle(p, p) От rectangle(int p).
Jarod42

@Jarod42 Да, это возможно, но мне интересно, хорошая ли это идея в данном случае. В этом простом случае нет необходимости вызывать другую функцию, потому что мы можем просто получить результат, написав напрямую return p*p вместо того, чтобы увеличивать накладные расходы на вызовы, вызывая другую функцию.
Anoop Rana

Это устраняет логику "дублирования". Скорее всего, код все равно будет встроен компилятором.
Jarod42

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................