社区
C++ 语言
帖子详情
C++类重载的默认构造函数中调用本类的全局对象?
ksdjfalsfj
2015-06-25 07:55:59
如题,
struct A
{
A();
int b;
} a;
A:A()
{
if(a.b == 0)
*****
}
int main()
{
return 0;
}
请问这种情况是什么原理呢?
...全文
161
4
打赏
收藏
C++类重载的默认构造函数中调用本类的全局对象?
如题, struct A { A(); int b; } a; A:A() { if(a.b == 0) ***** } int main() { return 0; } 请问这种情况是什么原理呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pengzhixi
2015-06-26
打赏
举报
回复
大概说下我的想法,不能保证准确性。首先你的a作为一个全局的对象 他是拥有static storage。而对于static storage的 variable的初始化可能经历两个阶段,第一个是 zero-initialized 第2个阶段就是所谓的constructor初始化阶段。如果是这样那么就可以解释你的问题了。当然具体的可能需要一个很熟悉标准的人来回答。可以@raje 不记得是不是他了。另外一个就是飞天御剑流,估计他很少上了
fly_dragon_fly
2015-06-26
打赏
举报
回复
类成员函数可以访问本类任何成员, 不过这样用有什么意义
ksdjfalsfj
2015-06-26
打赏
举报
回复
感谢楼上各位的回答~ 这样写确实没有编译错误,A::A()这里要修正下。 经过Visual Studio 2013调试,在main函数前,会先执行定义全局对象语句,然后执行定义的默认构造函数,然后返回定义,进入main函数,最后销毁。 代码中这个类仅使用了一次,就是这里定义一次。可能这里就为了做这点事情,
失散糖
2015-06-25
打赏
举报
回复
改成A::A() 反正语法上说得通,但是用起来很别扭吧
C++
:构造函数和析构函数
在
C++
中
,有一种特殊的成员函数,它的名字和
类
名相同,没有返回值,不需要用户显式
调用
(用户也不能
调用
),而是在创建
对象
时自动执行。这种特殊的成员函数就是构造函数(Constructor)。 构造函数必须是 public 属性的,否则创建
对象
时无法
调用
。当然,设置为 private、protected 属性也不会报错,但是没有意义。 构造函数没有返回值,因为没有变量来接收返回值,即使有也
类
·构造函数和析构函数
它的函数名也是没有ta返回
类
型也没有返回值,他也是编译器会自行生成的当然我们也可以自行定对于自行生成的析构函数他是只处理栈的内存但是对于new所开辟空间在堆上的数据他是不会处理的所以当我们用堆创建数据时要记得创建相应的析构函数否则会出现内存泄漏;但是为了避免
调用
发生冲突我们在定义构造函数时通常指选取三
中
的一种用于
重载
而缺生函数很明显是不能
重载
的应为这样的话我们的编译器是不能识别的;首先 我们要知道函数是可以
重载
那么在我们的
类
里面构造函数也是这样的。无参构造函数:和他的名字一样他没有参数。
类
,构造函数
https://zhidao.baidu.com/question/1579776576882637420.html 构造函数的方法名必须与
类
名相同。 构造方法是一种特殊的方法,具有以下特点。 (1)构造方法的方法名必须与
类
名相同。 (2)构造方法没有返回
类
型,也不能定义为void,在方法名前面不声明方法
类
型。 (3)构造方法的主要作用是完成
对象
的初始化工作,它能够把定义
对象
时的参数传给
对象
的域...
C++
类
的
默认构造函数
详解
像Stack这样的
类
,虽然也都是内置
类
型,但是 a指向了资源,编译器自动生成的赋值运算符
重载
完成的值拷贝/浅拷贝不符合我们的需求,所以需要我们自己实现深拷贝(对指向的资源也进行拷贝)。像Stack这样的
类
,虽然也都是内置
类
型,但是 a指向了资源,编译器自动生成的拷贝构造完成的值拷贝/浅拷贝不符合我们的需求,所以需要我们自己实现深拷贝(对指向的资源也进行拷贝)。但是如果返回
对象
是一个当前函数局部域的局部
对象
,函数结束就销毁了,那么使用引用返回是有问题的,这时的引用相当于一个野引用,
类
似一个野指针一样。
【
C++
】
类
和
对象
③(
类
的默认成员函数:拷贝构造函数 | 赋值运算符
重载
)
本篇博客主要讲了拷贝构造函数和赋值运算符
重载
,它们在
类
中
扮演着至关重要的角色,是
对象
复制和赋值操作的基础,确保
对象
在复制和赋值过程
中
保持正确的状态和行为。如果没有正确地实现这两个函数,可能会导致数据不一致、内存泄漏或其他严重问题。因此,在编写自定义
类
时,通常需要仔细考虑是否需要显式定义拷贝构造函数和赋值运算符
重载
,并根据
类
的具体需求来实现它们。对于某些
类
(如包含动态分配内存的
类
),显式定义这两个函数是必不可少的。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章