2011-03-05 12 views

cevap

16

Bildirge unhides bir temel sınıf üyesi. Bu genellikle bir üye fonksiyonunun aşırı yüklenmesine izin vermek için kullanılır. Örnek:

class Base { 
public: 
    void method() const; 
}; 

class Derived : public Base { 
public: 
    void method(int n) const; 
    // Without the using, you would get compile errors on d.method(); 
    using Base::method; 
}; 
5

vaka ben gördüm:

Ben geçersiz kılmak amacıyla A'dan foo işlevlerini gizler farklı bir imzaya sahip B'de yeni foo işlevi uygulayan Çünkü
class A 
{ 
    void foo(int); 
    void foo(float); 
} 

class B : public A 
{ 
    void foo(string); 
} 

B b; 
b.foo(12); // won't work! 

Bu davranış yapardım:

class B : public A 
    { 
     void foo(string); 
     using A::foo; 
    } 
4

çoğu zaman, bu gibi sözdizimi şöyle kullanılır:

class derived : public base { 
public: 
    [...] 
    using base::method; 
}; 

using bildirimi bildirisi üst sınıftan bir üye bildirimi. Bu, bazen derived numaralı başka bir üye bildiriminin üyeyi base'dan gizleyebilmesi için gereklidir. anotherClass

virtual void f(); 

gibi üye işlevini içeren bir temel sınıftır ve

virtual void f(int); 

gibi türetilmiş sınıfındaki fonksiyonun aşırı karar verirseniz

0

o f() 'de "gizler" temel sınıf. Örneğin, türetilmiş bir sınıfa bir işaretçi aracılığıyla f() çağrılması, derleyicinin artık taban sınıfından argüman almadan f() sürümünü görmediğinden bir hataya neden olur.

using Base::f; 

yazarak

Eğer baz sınıfları ilk etapta işe o beklenen edilebileceği gibi, böylece aşırı yük çözünürlüğü sağlayan geri kapsam içine işlev getirebilir.