Saya akan mengambil risiko menyatakan yang sudah jelas: Anda memanggil fungsi, jika itu didefinisikan dalam kelas dasar itu secara otomatis tersedia di kelas turunan (kecuali jika itu private
).
Jika ada fungsi dengan tanda tangan yang sama di kelas turunan, Anda dapat mendisambiguasinya dengan menambahkan nama kelas dasar diikuti oleh dua titik dua base_class::foo(...)
. Anda harus mencatat bahwa tidak seperti Java dan C #, C ++ tidak memiliki kata kunci untuk "kelas dasar" ( super
atau base
) karena C ++ mendukung multiple inheritance yang dapat menyebabkan ambiguitas.
class left {
public:
void foo();
};
class right {
public:
void foo();
};
class bottom : public left, public right {
public:
void foo()
{
//base::foo();// ambiguous
left::foo();
right::foo();
// and when foo() is not called for 'this':
bottom b;
b.left::foo(); // calls b.foo() from 'left'
b.right::foo(); // call b.foo() from 'right'
}
};
Secara kebetulan, Anda tidak dapat memperoleh langsung dari kelas yang sama dua kali karena tidak akan ada cara untuk merujuk ke salah satu kelas dasar di atas yang lain.
class bottom : public left, public left { // Illegal
};