//绝不在构造和析构函数中调用virtual函数
#include
#include
using namespace std;
class Transaction
{
public:
Transaction(const string& logInfo);
/virtual void logTranscation()const ;/
void logTranscation(const string& logInfo)const;
private:
//void init()
//{
// logTranscation();//此处调用纯虚函数的话,会abort,但是只调用虚函数的话又不是准确版本。所以需要改进
//}
};
Transaction::Transaction(const string& logInfo)
{
logTranscation(logInfo);
}
void Transaction::logTranscation(const string& logInfo)const
{
cout << logInfo;
}
class BuyTransaction :public Transaction
{
public:
BuyTransaction(const string& logInfo) :Transaction(createLogString(logInfo)) {};
private:
static string createLogString(const string&logInfo);;
};
std::string BuyTransaction::createLogString(const string&logInfo)
{
cout << “buy”;
return logInfo;
}
class SellTransaction :public Transaction
{
public:
virtual void logTranscation()const;
};
void SellTransaction::logTranscation() const
{
cout << “sell”;
}
int main()
{
BuyTransaction b(“bug”);//此时往上跑,跑到基类的构造函数,但是他调用了virtual,这个virtual是基类的log。
system(“pause”);
return 0;
}