Katakanlah saya memiliki kelas Foo
dan Bar
mengatur seperti ini:
class Foo
{
public:
int x;
virtual void printStuff()
{
std::cout << x << std::endl;
}
};
class Bar : public Foo
{
public:
int y;
void printStuff()
{
// I would like to call Foo.printStuff() here...
std::cout << y << std::endl;
}
};
Seperti dijelaskan dalam kode, saya ingin dapat memanggil fungsi kelas dasar yang saya timpa. Di Jawa ada super.funcname()
sintaksisnya. Apakah ini mungkin di C ++?
Jawaban:
Sintaks C ++ seperti ini:
sumber
call super requirement
, lihat di sini: en.wikipedia.org/wiki/Call_super )Iya,
Ini sama seperti
super
di Jawa, kecuali itu memungkinkan memanggil implementasi dari basis yang berbeda ketika Anda memiliki banyak pewarisan.sumber
Kadang-kadang Anda perlu memanggil implementasi kelas dasar, ketika Anda tidak dalam fungsi turunan ... Ini masih berfungsi:
sumber
x
mengetikBase*
dan menggunakanBase::Foo
sintaks agar berfungsiKalau-kalau Anda melakukan ini untuk banyak fungsi di kelas Anda:
Ini mungkin menghemat sedikit penulisan jika Anda ingin mengganti nama Foo.
sumber
Jika Anda ingin memanggil fungsi kelas dasar dari kelas turunannya, Anda bisa memanggil fungsi overridden dengan menyebutkan nama kelas dasar (seperti Foo :: printStuff () ).
kode di sini
Sekali lagi Anda dapat menentukan pada saat runtime fungsi mana untuk memanggil menggunakan objek dari kelas itu (diturunkan atau basis). Tetapi ini membutuhkan fungsi Anda di kelas dasar harus ditandai sebagai virtual.
kode di bawah ini
sumber
Periksa ini...
keluaran
cara terbaik adalah menggunakan fungsi :: dasar sebagai say @sth
sumber
protected
warisan. Untuk menggunakan pointer kelas dasar, Anda harus menggunakan warisan publik.Ya, Anda bisa menyebutnya. Sintaks C ++ untuk memanggil fungsi kelas induk di kelas anak adalah
Baca lebih lanjut tentang penggantian fungsi .
sumber