Berikut adalah kelas C ++ yang dibangun dengan tiga nilai.
class Foo{
//Constructor
Foo(std::string, int, char);
private:
std::string foo;
char bar;
int baz;
};
Semua tipe parameter berbeda.
Saya bisa membebani konstruktor sehingga pesanan tidak masalah.
class Foo{
//Constructors
Foo(std::string, char, int);
Foo(std::string, int, char);
Foo(char, int, std::string);
Foo(char, std::string, int);
Foo(int, std::string, char);
Foo(int, char, std::string);
private:
std::string foo;
char bar;
int baz;
};
Tapi apakah itu ide yang bagus?
Saya mulai melakukannya karena saya tahu hal-hal apa yang dibutuhkan kelas / fungsi;
Saya tidak selalu ingat bagaimana urutannya.
Saya telah mengasumsikan bahwa kompiler mengoptimalkan ini seolah-olah saya memanggil konstruktor yang sama.
//compiler will implement this with the same code?
//maybe not.. I could call a function to get a parameter,
//and that function could change the state of the program, before calling
//a function to get another parameter and the compiler would have to
//implement both
Foo foo1("hello",1,'a');
Foo foo2('z',0,"world");
Apa pendapat Anda tentang kelebihan fungsi sehingga pesanan tidak menjadi masalah?
Juga, Jika saya menulis beberapa fungsi utilitas,
apakah ide yang baik untuk memberikan nama fungsi berbeda yang melakukan hal yang sama?
misalnya.
void Do_Foo();
void DoFoo();
void do_foo();
//etc..
Saya tidak sering melihat keduanya tetapi konvensi serupa.
Haruskah saya menghentikan atau memeluk kebiasaan itu?
sumber
Jawaban:
Tidak.
Memiliki kelebihan konstruktor yang berbeda akan memiliki efek sebaliknya dari apa yang Anda inginkan. Programer yang datang setelah Anda mengharapkan kelebihan beban yang berbeda untuk memiliki perilaku yang berbeda, dan akan bertanya: "Apa jenis perilaku berbeda yang diungkapkan oleh masing-masing kelebihan ini?
Sebagian besar programmer mengharapkan disiplin memiliki parameter metode dalam urutan yang telah ditentukan, dan alat seperti IntelliSense akan memberi tahu mereka urutan parameter yang diharapkan saat mereka memasukkannya.
Memiliki beberapa nama fungsi yang melakukan hal yang sama adalah masalah yang sama; programmer mengharapkan varian memiliki perilaku yang berbeda. Tolong, satu fungsi atau metode per perilaku, dan hanya mengadopsi pola penamaan yang konsisten.
sumber
Kadang-kadang mendukung pergantian di antara argumen diperlukan. Contohnya:
Kami tidak ingin multiplikasi dari
int
dandouble
untuk menghitung sesuatu yang berbeda jika operan dibalik. Kami juga tidak ingin memaksa programmer untuk mengingat bahwa ketika mengalikanint
s dandoubles
, thedouble
terjadi di sebelah kiri!Tidak masalah bahwa ini adalah operator karena hal yang sama berlaku untuk:
Itu benar-benar tergantung pada jenis fungsinya. Sementara sebagian besar programmer mungkin menginginkan dukungan untuk komutatif di perpustakaan aritmatika, mereka tidak selalu menginginkan, katakanlah, fungsi perpustakaan I / O untuk mendukung semua perintah argumen yang mungkin.
Kekhawatiran mungkin bergantung pada persarangan yang diharapkan di mana pemanggilan fungsi akan terlibat. Fleksibilitas dalam operator aritmatika memungkinkan kita untuk mengubah struktur keseluruhan dari sintaksis pohon untuk memperjelas ekspresi keseluruhan: kelompok bersama-sama istilah yang serupa dan semacamnya.
sumber