通过示例说明:
#include <iostream>
class Base
{
public:
Base();
virtual void f();
virtual void func();
};
Base::Base()
{
std::cout << "Base construct" << std::endl;
f();
}
void Base::func()
{
f();
}
void Base::f()
{
std::cout << "Base f() called" << std::endl;
}
class Devied : public Base
{
public:
Devied();
void f();
};
Devied::Devied()
{
std::cout << "Devied construct" << std::endl;
}
void Devied::f()
{
std::cout << "Devied f() called" << std::endl;
}
//by zhaocl
int main()
{
Devied d;
d.func();
system( "pause" );
return 0;
}
运行结果:
Base construct
Base f() called
Devied construct
Devied f() called
基础知识点总结:
1、构造函数先父类再子类,所以先 Base 再 Decied
2、Base 中调用 f() ,该函数是一个虚函数,所以一般会调用 Devied::f(),因为对象d是Devied类型的,查看Base::Func() 中的函数调用可以得出结果。但是,如果是在Base的构造函数中调用,因为此时Devied还没构造,对象还不是Devied类型,所以调用的是Base::f(),这个查看构造函数中的函数调用可以看出。