当前位置: 首页 > news >正文

山东潍坊疫情最新消息长沙网站优化推广方案

山东潍坊疫情最新消息,长沙网站优化推广方案,中国网站建设哪家公司好,专业的企业宣传片制作企业C虚函数是通过虚表实现的,虚函数的地址记录在需表中,只对象完成构造完成后,虚函数的地址才最终确定。 构造函数中调用虚函数 基类先于派生类构造,所以构造时没法调用到派生类的虚函数,也就是说只能调用到自己&#x…

C++虚函数是通过虚表实现的,虚函数的地址记录在需表中,只对象完成构造完成后,虚函数的地址才最终确定。

构造函数中调用虚函数

基类先于派生类构造,所以构造时没法调用到派生类的虚函数,也就是说只能调用到自己,也就是虚函数失去多态功能。

析构函数调用虚函数

派生类先于基类析构,所以析构时基类没法调用到派生类的虚函数,同样只能调用到自己,虚函数也失去多态功能。

代码

#include <iostream>class Base
{
public:Base(){std::cout << "Base Construct.  ";this->fun2("Base::Base");}virtual ~Base(){std::cout << "Base Destruct.  ";this->fun2("Base::~Base");}virtual void fun(){std::cout << "Base::fun" << std::endl;}virtual void fun2(const char* caller){std::cout << "Base::fun2, caller: " << caller << std::endl;}
};class Derive : public Base
{
public:Derive(){std::cout << "Derive Construct.  ";this->fun2("Derive::Derive");}~Derive() override{std::cout << "Derive Destruct.  ";this->fun2("Derive::~Derive");}void fun2(const char* caller) override{std::cout << "Derive::fun2: caller: " << caller << std::endl;}void fun() override{std::cout << "Derive::fun" << std::endl;}
};int main()
{Base *p = new Derive;delete p;return 0;
}

运行结果:

Base Construct.  Base::fun2, caller: Base::Base
Derive Construct.  Derive::fun2: caller: Derive::Derive
Derive Destruct.  Derive::fun2: caller: Derive::~Derive
Base Destruct.  Base::fun2, caller: Base::~Base

在构造函数函数或者析构函数中调用虚函数,通常IDE会有警告,为了消除警告可以通过域名符号调用虚函数,此时相当于直接指定函数地址,不需要通过虚表所以不会有警告

class Base
{
public:Base(){std::cout << "Base Construct.  ";Base::fun2("Base::Base"); // 虚函数}virtual ~Base(){std::cout << "Base Destruct.  ";Base::fun2("Base::~Base"); // 虚函数}virtual void fun(){std::cout << "Base::fun" << std::endl;}virtual void fun2(const char* caller){std::cout << "Base::fun2, caller: " << caller << std::endl;}
};

类函数指针

当类函数指针指向一个虚函数时,同样会触发多态,并不会直接调用函数指针对应的函数

#include <iostream>class Base
{
public:virtual void fun(){std::cout << "Base::fun" << std::endl;}};class Derive : public Base
{
public:void fun() override{std::cout << "Derive::fun" << std::endl;}
};int main()
{Base *p = new Derive;p->fun();p->Base::fun();auto pBFun = &Base::fun;auto pDFun = &Derive::fun;(p->*pBFun)();((Derive*)p->*pDFun)();return 0;
}

结果

Derive::fun
Base::fun
Derive::fun
Derive::fun

http://www.mmbaike.com/news/78140.html

相关文章:

  • 有什么教人做论文的网站吗重庆网站推广专家
  • 鄂州做网站目前在哪个平台做推广好
  • 上海网站建设口碑好百度seo标题优化软件
  • 自己做网站平台需要服务器楚雄今日头条新闻
  • web网站开发是什么意思网络营销好不好
  • 网站的建设模式是指什么时候开始中国职业技能培训中心官网
  • 旅游网站首页模板网上永久视频会员是真的吗
  • 网站备案哪个部门seo是免费的吗
  • 技校网站建设与维护课程教学总结宁波免费建站seo排名
  • 网站添加地图导航百度新闻网站
  • 举报网站建设公司河北百度竞价优化
  • 建设网站功能定位中央下令全国各地核酸检测
  • 电子商务网站推广策划方案站长工具域名解析
  • 在局域网服务器建设网站教程深圳最好的外贸seo培训
  • 电子商务网站网站建设佐力药业股票
  • 企业做网站的凭证怎么做百度推广获客方法
  • 东莞广告公司东莞网站建设搜索引擎网站提交入口
  • 做网站 php python公司快速建站
  • 德国设计网站seo技术培训岳阳
  • 商贸信息网站做一个网站要花多少钱
  • 网址大全免费网站怎么进行网络营销
  • 南宁网站建设找哪家如何推广一个品牌
  • 小公司没网站站长素材官网
  • 广州 营销型网站建设全国知名网站排名
  • 哪里可以做免费网站朋友圈广告投放价格表
  • 哪个网站的财经做的好知乎seo基础知识考试
  • 有哪些可以做网站的平台全国疫情最新数据
  • 手机网站滑动效果合肥seo培训
  • 网站内容为王市场营销案例150例
  • 手机网站按那个尺寸做百度电话查询