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

做网站+广告费+步骤百度贴吧网页版入口

做网站+广告费+步骤,百度贴吧网页版入口,做网站优化找谁,海外vps一键配置WordPress背景 作为一个C小白,最近在看深度解析对象模型的时候,发现一个很久以来的认知错误:编译器会为没有定义构造函数的class生成一个默认构造函数。其实这个观点是错误的,编译器只会在四种情况下生成。 相关知识 一定要明确一个事情…
背景

作为一个C++小白,最近在看深度解析对象模型的时候,发现一个很久以来的认知错误:编译器会为没有定义构造函数的class生成一个默认构造函数。其实这个观点是错误的,编译器只会在四种情况下生成。

相关知识
  • 一定要明确一个事情,就是基础数据类型没有默认构造函数,因为int, float,char这些不是class/struct,基础数据类型就是基础数据类型,不要自己强行脑补为类或者结构。
  • 构造函数花括号里不能用小括号初始化任何成员变量,凡是想初始化都放在初始化列表里就好了
四种情况
情况一

当成员变量中有默认构造函数时,举例说明:

class Test
{
public:int a;float b;
};
int main()
{Test t;int c = t.a +1;return 0;
}

在这里插入图片描述

这种情况下编译器不会生成默认构造函数,因为int, float不是对象,没有默认构造函数。可以根据汇编代码发现确实没有。

class Test
{
public:int a;float b;string s;
};

在这里插入图片描述
可以看到一旦加入string的话就会出现默认构造函数了。

情况二

该类的基类有默认构造函数

情况三

类中存在虚函数,那么C++编译器会为你生成默认构造函数,以初始化虚表(虚函数表vftable)。

情况四

存在虚基类,那么C++编译器会为你生成默认构造函数,以初始化虚基类表(vbtable)。

生成默认构造函数
  1. 首先生成一个空壳子
inline Construct()
{}
  1. 补充初始化列表

这里是一个知识点,list中的顺序是按声明顺序来的,跟你怎么写代码没啥关系

这里初始化列表会把所有的成员变量的默认构造函数依次加入进来,下面是一个伪代码的例子:

class Test
{
public:float d;string A;Student B;Teacher C;int e;
}
inline Test() {A(), B(), C(), e} //这里e不会初始化,只是分配内存
{}
  1. 把初始化列表挪到函数大括号中
inline Test()
{A();B();C();e;
}

**可以看到,自动生成的默认构造函数其实并不会给所有成员都初始化**。此外,这里可能会觉得第三步和第二步可以合在一起,其实拆开是为了后面程序员自己添加构造函数时,编译器补充函数信息逻辑更清楚。

自定义默认构造函数

对于自定义默认构造函数,编译器有三个原则:

  • 插入的代码只能在用户实现的代码前
  • 补充的代码符合成员变量的声明顺序
  • 基础数据类型依然不是编译器的考虑的范围
方式一、初始化列表为空

我们根据上面已经知道,编译器会自动生成构造函数,但是如果程序员自己提供了构造函数怎么处理?

class Test
{
public:float d;string A;Student B;Teacher C;int e;
}
Test()
Test::Test()
{B("student");
}
  1. 补充初始化列表
Test()
Test::Test(){d, A(), B(), C(), e}
{//B("student"); //编译器会报错:成员变量**对象**(不是基础数据)必须在构造函数初始化列表里初始化B = "student";
}
  1. 挪到函数中
Test()
Test::Test(){}
{d;A();B();C();e;B = "student";// 等效于:tmp("student"), B=tmp;
}
方式一、初始化列表不为空
class Test
{
public:float d;string A;Student B;Teacher C;int e;
}
Test()
Test::Test():B("student")
{
}
  1. 补充初始化列表
Test()
Test::Test(){d, A(), B("student"), C(), e}
{
}
  1. 挪到函数中
Test()
Test::Test(){}
{d;A();B("student");C();e;
}

根据这两个小例子可以好好的体会上面的三个原则

http://www.tj-hxxt.cn/news/114351.html

相关文章:

  • 做交友网站需要什么免费发帖论坛大全
  • 网站搭建原则html网页制作用什么软件
  • 优秀flash网站设计个人怎么在百度上做推广
  • 网站建设论文 php网络推广费用
  • 宁夏网站建设百度seo快速排名优化服务
  • 主做销售招聘的招聘网站有哪些seo顾问是干什么
  • 自学网站开发多少时间国外seo大神
  • 现在的那家做网站比较好一些呢最近最新的新闻
  • 知识付费网站搭建教程百度关键词优化大师
  • 东营市两学一做考试网站新闻软文怎么写
  • 苏州哪家做网站友情链接的作用有哪些
  • 业务代刷平台网站怎么做网络推广有哪些
  • 3g网站制作成都网站快速排名提升
  • 怎么样建设网站山西seo和网络推广
  • 网络营销的概念?seo网站有优化培训班吗
  • 产品网站推广方案百度排名优化专家
  • 南昌网站建设模板文档网站备案查询系统
  • 赤峰做企业网站公司扬州网络优化推广
  • 手机购物网站模板周口seo
  • 湛江找人做网站排名c++培训班学费一般多少
  • 创建自己网站百度一下手机版首页
  • 什么网站权重快如何制作视频网站
  • 政府网站建设工作会议上的讲话软文街
  • 遂宁网站优化网址模板建站
  • 哪个网站做税务登记网店培训班
  • 企业网站建设亮点手机清理优化软件排名
  • 专业网站建设哪里找女教师遭网课入侵直播录屏曝光i
  • 免费的软件下载安装谷歌优化是什么意思
  • 做网站优化排名品牌推广方式有哪些
  • canva可画官网百度推广优化怎么做的