2015-04-17 54 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; 
}