C++aşırı yükleme işlevinin prototipini yapın

0

Soru

C++ ' da bir prototip ile aşırı yükleme işlevi yapmak istiyorum.

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

Hata var

int rectangle(int p, int l);

bu, aşırı yükleme işlevine sahip bir prototip yapmak mümkün mü? mümkünse nasıl yapılır

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

En iyi cevabı

1

İşlevi kullanmadan / çağırmadan önce bildirmeniz gerekir. 2 Bağımsız değişken sürümünü bildirdiniz rectangle işlev, ancak sürüm alan 1 argümanını bildirmeyi unutmuş gibi görünüyorsunuz.

Aşağıda gösterildiği gibi, 1 bağımsız değişken sürümü için bildirimi eklerseniz, programınız çalışır (derler).

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

Programın çıktısı burada görülebilir.

Alternatif çözüm:

Her işlevi ayrı ayrı bildirmek istemiyorsanız, bunları aşağıda gösterildiği gibi bildirmek yerine main'den önce tanımlamanız yeterlidir.

#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

"İşlevi kullanmadan / çağırmadan önce bildirmeniz gerekir."- alternatif olarak, işlevi ayrı bir bildirim olmadan kullanılmadan önce tanımlamanız yeterlidir. Tek dosyalı programlar için, iletme bildirimi yalnızca karşılıklı bağımlılık olduğunda gereklidir.
Dai

yani aşırı yükleme işleviyle aynı sayıda prototipe ihtiyacım var mı?
Hanif Ramadhani

@HanifRamadhani veya tüm işlevlerinizi ana işlevlerden önce koyun. Gerçekten ihtiyacınız olmadıkça iletme bildirimini kullanın.
Louis Go

@HanifRamadhani Her işlevi ayrı ayrı bildirmek istemiyorsanız, bunları alternatif çözümümde yaptığım gibi main'den önce tanımlayabilirsiniz. Cevabıma eklediğim alternatif çözüme göz atın.
Anoop Rana

@HanifRamadhani Rica ederim. Size yardımcı olduysa cevabımı doğru olarak işaretleyebilir misiniz?
Anoop Rana

Aşırı yüklenme sırasını bile tersine çevirir ve arardım rectangle(p, p) -den rectangle(int p).
Jarod42

@Jarod42 Evet bu mümkün ama bu durumda iyi bir fikir olup olmadığını merak ediyorum. Bu basit durumda, başka bir işlevi çağırmaya gerek yoktur, çünkü sonucu doğrudan yazarak elde edebiliriz return p*p başka bir işlevi çağırarak arama yükünü artırmak yerine.
Anoop Rana

"Çoğaltma" mantığını kaldırır. Şansınız, kodun yine de derleyici tarafından satırlanmasıdır.
Jarod42

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................