2015-04-17 26 views
0

給予代碼:C++繼承的方法調用基類的方法,而不是重載的方法

class A{ 
public: 
    void callFirst() 
    { 
     callSecond(); 
    } 
    void callSecond() 
    { 
     cout << "This an object of class A." << endl; 
    } 
}; 

class B : public A{ 
public: 
    void callSecond() 
    { 
     cout << "This is an object of class B." << endl; 
    } 
}; 

int main() 
{ 
    B b; 
    b.callFirst(); 

    return 0; 
} 

我得到的輸出:

This an object of class A. 

我能做些什麼,以至於當我調用繼承的方法的派生類,除非重載第一個方法,否則不會調用基類的方法而不是重載的方法?

+2

利用'override',你會在這裏得到一個編譯器錯誤。 – chris

回答

6

你必須標記callSecond()成員函數virtual,否則你會得到編譯時綁定(vs運行時綁定)。

2

你應該在類A虛擬callSecond

#include<iostream> 
using namespace std; 
class A{ 
public: 
    void callFirst() 
    { 
     callSecond(); 
    } 
    virtual void callSecond() 
    { 
     cout << "This an object of class A." << endl; 
    } 
}; 

class B : public A{ 
public: 
    void callSecond() 
    { 
     cout << "This is an object of class B." << endl; 
    } 
}; 

int main() 
{ 
    B b; 
    b.callFirst(); 

    return 0; 
}