Açık olanı belirtme riskini alırım: Fonksiyonu çağırırsınız, temel sınıfta tanımlanmışsa, türetilmiş sınıfta otomatik olarak kullanılabilir (eğer değilse private
).
Türetilmiş sınıfta aynı imzayla bir işlev varsa, temel sınıfın adını ve ardından iki sütunu ekleyerek bu işlevi netleştirebilirsiniz base_class::foo(...)
. Java ve C # 'dan farklı olarak, C ++ ' nın temel sınıf "( veya ) için bir anahtar kelimesi olmadığını , çünkü C ++ belirsizliğe yol açabilecek birden fazla kalıtımı desteklediğini unutmayın .super
base
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'
}
};
Bu arada, aynı sınıftan iki kez doğrudan türetemezsiniz çünkü temel sınıflardan birine diğerine atıfta bulunmanın bir yolu olmayacaktır.
class bottom : public left, public left { // Illegal
};