Rumah >pembangunan bahagian belakang >C++ >Adakah C Menyokong Rantaian Pembina, dan Bagaimana Ia Berbanding dengan C#?

Adakah C Menyokong Rantaian Pembina, dan Bagaimana Ia Berbanding dengan C#?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-25 14:22:18996semak imbas

Does C   Support Constructor Chaining, and How Does It Compare to C#?

Constructor Chaining dalam C

Sebagai pembangun C#, anda mungkin biasa dengan keupayaan untuk memanggil pembina lain dari dalam pembina. Dalam C#, ini dikenali sebagai rantaian pembina. Adakah terdapat ciri yang serupa dalam C ?

C 11 dan Seterusnya

Dalam C 11 dan versi yang lebih baru, rantaian pembina disokong melalui mewakilkan pembina. Sintaks berbeza sedikit daripada C#:

class Foo {
public:
  Foo(char x, int y) {}
  Foo(int y) : Foo('a', y) {}
};

Dalam contoh ini, pembina Foo(int y) mewakilkan kepada pembina Foo(char x, int y) dengan x ditetapkan kepada 'a'.

C 03

Malangnya, rantaian pembina tidak disokong secara langsung dalam C 03. Walau bagaimanapun, terdapat dua pilihan utama untuk mensimulasikan tingkah laku ini:

1. Parameter Lalai:

Anda boleh menggabungkan berbilang pembina dengan menyediakan nilai lalai untuk beberapa parameter:

class Foo {
public:
  Foo(char x, int y = 0);  // Combines constructors Foo(char) and Foo(char, int)
};

2. Kaedah Init:

Ekstrak kod biasa ke dalam kaedah peribadi:

class Foo {
public:
  Foo(char x);
  Foo(char x, int y);
private:
  void init(char x, int y);
};

Foo::Foo(char x) : init(x, int(x) + 7) {}
Foo::Foo(char x, int y) : init(x, y) {}

void Foo::init(char x, int y) {
  // Shared initialization code
}

Walaupun teknik ini tidak menyediakan rantaian pembina sebenar, ia membenarkan kefungsian yang serupa.

Atas ialah kandungan terperinci Adakah C Menyokong Rantaian Pembina, dan Bagaimana Ia Berbanding dengan C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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