Dalam C++, Struct dan class mempunyai penulisan yang sama. Deklarasi class dan struct memiliki anggota dengan akses public kecuali jika dinyatakan lain. C ++ tidak membedakan nama class dan nama tag, paling tidak dari sudut pandang pemprogram dan tetap menerima deklarasi structure. Kompatibilitas C ++ tidak sebatas pada perbedaan nama class daan nama type karena C++ masih memerlukan definisi type POD (Plain Old Data). C++ mendefinisikan POD Type sebagai objek suatu class yang tidak mempunyai userdefined constructor, anggota protected maupun private, tidak memiliki base class dan tidak memiliki fungsi virtual.
Compiller C++ dapat menambahkan default constructor apabila diperlukan, jika dalam definisi class:
Sebagai contoh deklarasi class A dan B berikut :
Class A
{
Public :
A () ;
}
Class B
{
Public :
B (const A&) ;
}
Lalu terjadi konversi type obyek A ke B secara implicit melalui Copy constructor B
A a
B b=a ; //implicit conversion
C++ menyediakn suatu sarana yang menggunakan keyword Eksplisit untuk merubah constructor dengan satu argumen agar tidak berfungsi sebagai conversion operator.
Jika class B menyatakan explicit pada copy constructor sebagai berikut :
Class B
{
Public :
Explicit B (const A& a) ; //explicit ctor
}
Maka konversi secara implicit tidak daapat dilakukan. Konversi A ke B dapat dilakukan secara eksplisit dengan menggunakan typecast :
A a ;
B b=statistic_cast <B>(a) ; atau
B b=(B) a ;
Compiller C++ dapat menambahkan default constructor apabila diperlukan, jika dalam definisi class:
- Tidak tertulis secara eksplisit default constructor dan tidak ada dejlarasi constructor lain.
- Tidak ada anggota class berupa data const maupun referens.
- Pertama, inisialisasi data
- Kedua, ekesekusi constructor
Sebagai contoh deklarasi class A dan B berikut :
Class A
{
Public :
A () ;
}
Class B
{
Public :
B (const A&) ;
}
Lalu terjadi konversi type obyek A ke B secara implicit melalui Copy constructor B
A a
B b=a ; //implicit conversion
C++ menyediakn suatu sarana yang menggunakan keyword Eksplisit untuk merubah constructor dengan satu argumen agar tidak berfungsi sebagai conversion operator.
Jika class B menyatakan explicit pada copy constructor sebagai berikut :
Class B
{
Public :
Explicit B (const A& a) ; //explicit ctor
}
Maka konversi secara implicit tidak daapat dilakukan. Konversi A ke B dapat dilakukan secara eksplisit dengan menggunakan typecast :
A a ;
B b=statistic_cast <B>(a) ; atau
B b=(B) a ;