构造函数里面包含virtual函数的情况
先看一段代码
class Transaction {// 所有交易的基类
public:
Transaction();
virtual void logTransaction() const = 0;//建立依赖于具体交易类型的登录项
};
Transaction::Transaction() //实现基类的构造函数
{
logTransaction(); //最后,登录该交易
}
class BuyTransaction : public Transaction {
// 派生类
public:
virtual void logTransaction() const; //怎样实现这种类型交易的登录?
};
class SellTransaction : public Transaction {
//派生类
public:
virtual void logTransaction() const; //怎样实现这种类型交易的登录?
这段代码来自《Effecitive C++》条款09,当声明一个BuyTransaction对象的时候,首先Transaction的构造函数会被调用,从而其virtual函数也被调动,这里就是引发惊奇的起点。这时候被调用的logTransaction是Transaction的版本,而不是派生类BuyTransaction的版本。
我们再看一段代码。
class Base
{
public:
Base()
{
Fuction();
}
virtual void Fuction()
{
cout < 'base::fuction'=""><>
}
};
class A : public Base
{
public:
A()
{
Fuction();
}
virtual void Fuction()
{
cout < 'a::fuction'=""><>
}
};
当声明一个派生类对象,会发生什么呢?
A a;
程序输出为
Base::Fuction
A::Fuction
联系客服