Share via


abstrak (C++/CLI dan C++/CX)

Kata kunci abstrak menyatakan:

  • Jenis dapat digunakan sebagai jenis dasar, tetapi jenis itu sendiri tidak dapat diinstansiasi.

  • Fungsi anggota jenis hanya dapat ditentukan dalam jenis turunan.

Semua Platform

Sintaks

abstrak pengidentifikasi kelas deklarasikelas{}

virtualabstrak anggota-fungsi-pengidentifikasi() jenispengembalian ;

Keterangan

Sintaks contoh pertama mendeklarasikan kelas menjadi abstrak. Komponen deklarasi kelas dapat berupa deklarasi C++ asli (class atau struct), atau deklarasi ekstensi C++ (kelas ref atau struktur ref) jika /ZW opsi atau /clr pengkompilasi ditentukan.

Sintaks contoh kedua mendeklarasikan fungsi anggota virtual menjadi abstrak. Mendeklarasikan abstrak fungsi sama dengan mendeklarasikannya sebagai fungsi virtual murni. Menyatakan abstrak fungsi anggota juga menyebabkan kelas penutup dinyatakan abstrak.

Kata kunci abstrak didukung dalam kode asli dan khusus platform; yaitu, dapat dikompilasi dengan atau tanpa /ZW opsi atau /clr pengkompilasi.

Anda dapat mendeteksi pada waktu kompilasi jika jenis abstrak dengan __is_abstract(type) sifat jenis. Untuk informasi selengkapnya, lihat Dukungan Pengkompilasi untuk Jenis Sifat.

Kata kunci abstrak adalah penentu penggantian peka konteks. Untuk informasi selengkapnya tentang kata kunci peka konteks, lihat Kata Kunci Peka Konteks. Untuk informasi selengkapnya tentang penentu penggantian, lihat Cara: Mendeklarasikan Penentu Penggantian dalam Kompilasi Asli.

Windows Runtime

Untuk informasi selengkapnya, lihat Kelas dan struktur Ref.

Persyaratan

Opsi pengkompilasi: /ZW

Runtime Bahasa Umum

Persyaratan

Opsi pengkompilasi: /clr

Contoh

Contoh kode berikut menghasilkan kesalahan karena kelas X ditandai abstrak.

// abstract_keyword.cpp
// compile with: /clr
ref class X abstract {
public:
   virtual void f() {}
};

int main() {
   X ^ MyX = gcnew X;   // C3622
}

Contoh kode berikut menghasilkan kesalahan karena membuat instans kelas asli yang ditandai abstrak. Kesalahan ini akan terjadi dengan atau tanpa /clr opsi pengkompilasi.

// abstract_keyword_2.cpp
class X abstract {
public:
   virtual void f() {}
};

int main() {
   X * MyX = new X; // C3622: 'X': a class declared as 'abstract'
                    // cannot be instantiated. See declaration of 'X'}

Contoh kode berikut menghasilkan kesalahan karena fungsi f menyertakan definisi tetapi ditandai abstrak. Pernyataan akhir dalam contoh menunjukkan bahwa mendeklarasikan fungsi virtual abstrak setara dengan mendeklarasikan fungsi virtual murni.

// abstract_keyword_3.cpp
// compile with: /clr
ref class X {
public:
   virtual void f() abstract {}   // C3634
   virtual void g() = 0 {}   // C3634
};

Baca juga

Ekstensi Komponen untuk .NET dan UWP