虚函数背后的秘密
2012-07-19 17:52
169 查看
#include <iostream>
using namespace std;
class Base
{
public:
virtual void fun()
{
cout << "Base::fun" << endl;
}
void show()
{
fun();
}
};
class Drive: public Base
{
public:
virtual void fun()
{
cout << "Drive::fun" << endl;
}
};
int main()
{
Drive d;
d.show();
d.fun();
return 0;
}
Drive::fun
Drive::fun
这个程序清楚地示范了基类的函数是如何调用派生类的虚函数的。这一技术被用于不同的框架中,例如MFC和设计模式(比如Template Design Pattern)。现在你可以修改一下这个程序来看看它的行为,我将要在基类的构造函数中调用虚函数,而不是普通的成员函数。
#include <iostream>
using namespace std;
class Base
{
public:
Base()
{
fun();
}
virtual void fun()
{
cout << "Base::fun" << endl;
}
};
class Drive: public Base
{
public:
virtual void fun()
{
cout << "Drive::fun" << endl;
}
};
int main()
{
Drive d;
d.fun();
return 0;
}
Base::fun
Drive::fun
这个程序表明,我们不能在基类的构造函数中调用派生类的虚函数。
using namespace std;
class Base
{
public:
virtual void fun()
{
cout << "Base::fun" << endl;
}
void show()
{
fun();
}
};
class Drive: public Base
{
public:
virtual void fun()
{
cout << "Drive::fun" << endl;
}
};
int main()
{
Drive d;
d.show();
d.fun();
return 0;
}
Drive::fun
Drive::fun
这个程序清楚地示范了基类的函数是如何调用派生类的虚函数的。这一技术被用于不同的框架中,例如MFC和设计模式(比如Template Design Pattern)。现在你可以修改一下这个程序来看看它的行为,我将要在基类的构造函数中调用虚函数,而不是普通的成员函数。
#include <iostream>
using namespace std;
class Base
{
public:
Base()
{
fun();
}
virtual void fun()
{
cout << "Base::fun" << endl;
}
};
class Drive: public Base
{
public:
virtual void fun()
{
cout << "Drive::fun" << endl;
}
};
int main()
{
Drive d;
d.fun();
return 0;
}
Base::fun
Drive::fun
这个程序表明,我们不能在基类的构造函数中调用派生类的虚函数。
相关文章推荐
- ATL布幔下的秘密之虚函数背后的东西
- 虚函数背后的秘密
- ATL布幔下的秘密之虚函数背后的东西
- 虚函数背后的秘密2
- ATL布幔下的秘密之虚函数背后的东西
- @Override标签背后的小秘密---记录java的思行合一(作者:leeon)
- 他们真的很厉害吗?破解超人背后的秘密
- 互联网环境中用户体验背后的秘密
- C/C++连续4期创造辉煌节节高,成功背后有什么秘密?
- 隐藏在裸眼3D电视背后的秘密
- 腾讯微信技术总监周颢:一亿用户增长背后的架构秘密
- IE9:用锁定打通网页背后秘密通道
- 华山论剑之 C++引用的实现机制四(背后的秘密和真相)
- 数学函数——在函数式编程背后的动力
- 搜索引擎关键字背后的秘密
- 表单提交Post方法、Get方法背后的秘密
- C++中虚函数的实现背后
- C语言的那些秘密之---函数返回局部变量
- 中国电信屏蔽Google背后的秘密
- 函数参数的秘密