虚函数的定义,课本上讲的很明白,看了这个例子就一切都懂了
class Base
{
private:
int mNumber;
public:
Base(int i){mNumber =i;}
virtual void print( ) {cout << b_number << endl;}
};
class Derived : public Base
{
private:
int mNumber;
public:
Derived( int i) : Base(i){ };
void print( )
{
cout << 2*mNumber<< endl;
}
};
那么用Base的实例调用print,输出的就是i的值,用Derived的实例调用print,输出的就是2*i的值
简单地说,虚函数总是指向最后一个实现它的类。
可在使用中出现了问题:虚函数在基类构造函数中调用,不管重写多少次,基类都会运行原有的!
这可能是因为在子类初始化时同时调用了基类的构造函数,而基类的构造函数一定不会被覆盖。
就记住好了,使用虚函数最好不要在构造函数中使用。