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{}
virtual
abstrak 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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk