2016-04-12 28 views
0

Base'u arayacağım bir temel sınıfım var ve türetilmiş bir sınıf Derived. Base sınıfı, tanımlı bir operator>> işlevinin içinden çağrılan readInData(istream) adlı bir yönteme sahiptir. Derived o readInData(istream) kendi tanımı var, ancak henüz operatör (için, bu kendi tanımı yok Base dan tanımı devralır sahiptir.C++ - bir taban sınıfının 'base class sınıfından' overridden virtual yöntemi 'çağrılıyor

Sorum, Derived eğer, tanımlanan yöntemini çağıran tabanında tanımlanmış operatörünü kullanır

Her iki sınıfları, o çağrılan o Base::readInData(istream) veya Derived::readInData(istream) olacak?

ben çağrılacak Derived::readInData(istream) istiyorum, bu yüzden de bunu yapmak için operatöre yeniden tanımlamak gerekir?

Teşekkür, Mark

cevap

2

Sorunuz, işlevin sanal olduğunu belirttiğinden, çağrılan Türetilmiş :: readInData (istream) olacaktır.

+0

Olağanüstü haberler. Teşekkür ederim. – marcuthh

1
class A 
{ 
public: 
    void print() 
    { 
    std::cout << saySomething() << std::endl; 
    } 
    virtual std::string saySomething() 
    { 
    return "hey!"; 
    } 
}; 

class B : public A 
{ 
public: 
    virtual std::string saySomething() 
    { 
    return "I am B!"; 
    } 
}; 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
    system("pause"); 

    B b; 
    b.print(); 

    system("pause"); 
} 

Çıktı: Ben B!