OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4340|回复: 7

C++的二阶构造函数疑问

[复制链接]

172

主题

541

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3449
金钱
3449
注册时间
2015-10-5
在线时间
492 小时
发表于 2018-7-26 00:33:02 | 显示全部楼层 |阅读模式
1金钱
为什么 TwoPhaseCons* obj = TwoPhaseCons::NewInstance();  不会报错??????????


TwoPhaseCons* obj = TwoPhaseCons::NewInstance();
这句话是绕开了构造函数去执行NewInstance();函数吗?



aaa.png

最佳答案

查看完整内容[请看2#楼]

指针是指向一个地址的变量。 对象指针表示指向一个此类的一个对象,不会产生实际的对象。 你的演示中,通过 new 在堆中创建一个对象,为了可以访问,将对象指针指向堆空间生成对象的地址处。
认真做好笔记....
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
170
金钱
170
注册时间
2014-9-27
在线时间
54 小时
发表于 2018-7-26 00:33:03 | 显示全部楼层
飞过漠北的蓝天 发表于 2018-7-27 01:03
指针是不会生成数据的,所以对象指针并不会产生一个对象,函数指针也不会生成函数我这样理解对吗?

指针是指向一个地址的变量。
对象指针表示指向一个此类的一个对象,不会产生实际的对象。
你的演示中,通过 new 在堆中创建一个对象,为了可以访问,将对象指针指向堆空间生成对象的地址处。
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164932
金钱
164932
注册时间
2010-12-1
在线时间
2100 小时
发表于 2018-7-26 01:45:18 | 显示全部楼层
帮顶
回复

使用道具 举报

32

主题

981

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
7677
金钱
7677
注册时间
2014-8-13
在线时间
1568 小时
发表于 2018-7-26 06:52:36 | 显示全部楼层
本帖最后由 mack13013 于 2018-7-26 07:05 编辑

NewInstance()是静态,内部还是new,最终会调用TwoPhaseCons()吧。各自打印一下,看下调用先后顺序吧。

写了个测试程序试了一下,输出结果如下:
obj.jpg


我又搜索了一下二阶构造函数,我觉得你可能存在的疑问的解答是:NewInstance()是静态的,类中静态函数可以没有对象而直接调用的,跟全局类似。

回复

使用道具 举报

2

主题

760

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2018-7-26 08:17:25 | 显示全部楼层
3#正解,类的静态成员函数可以直接拿过来用的,它不依赖于某个具体的类的对象,所以就算是当前程序没有建立一个类的实例(也就是对象)也可以调用这个类的静态成员函数。
十六进制带我飞。
回复

使用道具 举报

172

主题

541

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3449
金钱
3449
注册时间
2015-10-5
在线时间
492 小时
 楼主| 发表于 2018-7-26 13:46:07 | 显示全部楼层
mack13013 发表于 2018-7-26 06:52
NewInstance()是静态,内部还是new,最终会调用TwoPhaseCons()吧。各自打印一下,看下调用先后顺序吧。

...

好像是线调用了NewInstance(),然后在里面进行的对象申请,然后在赋值给指针,,,,,,
这里为什么指针能够创建成功?构造函数可是private的!
认真做好笔记....
回复

使用道具 举报

2

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
170
金钱
170
注册时间
2014-9-27
在线时间
54 小时
发表于 2018-7-26 16:18:06 | 显示全部楼层
静态成员函数是类中特殊的成员函数
静态成员函数属于整个类所有
可以通过类名直接访问共有静态成员函数
可以通过对象名访问共有静态成员函数

NewInstance() 是类静态 ”成员“ 函数,属于类内部,当然可以调用 private 的构造函数。
将构造函数声明为 private 是强制告诉使用者,当前类必须进行二阶构造。
回复

使用道具 举报

172

主题

541

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3449
金钱
3449
注册时间
2015-10-5
在线时间
492 小时
 楼主| 发表于 2018-7-27 01:03:07 | 显示全部楼层
第109位梁山好汗 发表于 2018-7-26 16:18
静态成员函数是类中特殊的成员函数
静态成员函数属于整个类所有
可以通过类名直接访问共有静态成员函数


指针是不会生成数据的,所以对象指针并不会产生一个对象,函数指针也不会生成函数我这样理解对吗?
认真做好笔记....
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-16 19:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表