Rumah > pembangunan bahagian belakang > C++ > Bolehkah Fungsi Lebih Muatan dalam C Dicapai Berdasarkan Nilai Pulangan, dan jika ya, Bagaimana?

Bolehkah Fungsi Lebih Muatan dalam C Dicapai Berdasarkan Nilai Pulangan, dan jika ya, Bagaimana?

Barbara Streisand
Lepaskan: 2024-11-28 21:59:12
asal
829 orang telah melayarinya

Can Function Overloading in C   Be Achieved Based on Return Value, and if so, How?

Mengatasi Pemuatan Lebihan Fungsi mengikut Nilai Pulangan

Pengenalan

Pembebanan lebihan fungsi dalam C biasanya melibatkan pembezaan fungsi berdasarkan jenis parameternya . Walau bagaimanapun, ia juga mungkin untuk membebankan fungsi berdasarkan nilai pulangannya. Ini membolehkan anda menentukan fungsi yang mengembalikan jenis data yang berbeza bergantung pada cara ia digunakan.

Pernyataan Masalah

Pertimbangkan tugas berikut:

int n = mul(6, 3); // n = 18
std::string s = mul(6, 3); // s = "666"
Salin selepas log masuk

Di sini, anda perlu mentakrifkan fungsi bernama mul yang mengembalikan sama ada integer atau rentetan, bergantung pada cara nilai pulangannya digunakan.

Pendekatan Penyelesaian

Penaipan Eksplisit:

Satu pendekatan ialah membezakan panggilan secara eksplisit dengan menaip. Sebagai contoh, anda boleh menentukan dua fungsi berasingan:

int mul(int, int);
std::string mul(char, int);
Salin selepas log masuk

Dan panggilnya seperti berikut:

int n = mul(6, 3); // n = 18
std::string s = mul('6', 3); // s = "666"
Salin selepas log masuk

Penunjuk Dummy:

Satu lagi kaedah melibatkan penambahan parameter dummy pada setiap fungsi, memaksa pengkompil untuk memilih yang betul. Contohnya:

int mul(int *, int, int);
std::string mul(std::string *, char, int);
Salin selepas log masuk

Dan gunakannya dengan:

int n = mul((int *) NULL, 6, 3); // n = 18
std::string s = mul((std::string *) NULL, 54, 3); // s = "666"
Salin selepas log masuk

Templat Nilai Pulangan (Pilihan 1):

Anda boleh mencipta fungsi "dummy" dengan kod yang tidak akan dikompilkan jika digunakan segera. Kemudian, tentukan versi templat khusus untuk jenis pulangan yang diingini:

template<typename T> T mul(int, int);
template<> int mul<int>(int, int);
template<> std::string mul<std::string>(int, int);
Salin selepas log masuk

Gunakannya seperti berikut:

int n = mul<int>(6, 3); // n = 18
std::string s = mul<std::string>(54, 3); // s = "666"
Salin selepas log masuk

Templat Nilai Pulangan (Pilihan 2):

Untuk kes dengan parameter yang berbeza, anda boleh menentukan pengkhususan templat yang berasingan dengan parameter yang berbeza jenis:

template<typename T> T mul(int, int);
template<> int mul<int>(int, int);
template<typename T> T mul(char, int);
template<> std::string mul<std::string>(char, int);
Salin selepas log masuk

Dan panggil mereka sebagai:

int n = mul<int>(6, 3); // n = 18
std::string s = mul<std::string>('6', 3); // s = "666"
Salin selepas log masuk

Atas ialah kandungan terperinci Bolehkah Fungsi Lebih Muatan dalam C Dicapai Berdasarkan Nilai Pulangan, dan jika ya, Bagaimana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan