打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C 构造函数和析构函数为什么不能调用虚函数?

构造函数里面包含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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C++箴言:避免析构函数调用虚函数
C++箴言:绝不在构造或析构期调用虚函数
虚析构函数.cpp
虚析构函数(√)、纯虚析构函数(√)、虚构造函数(X)
整理之c++笔试2
虚拟继承
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服