gpt4 book ai didi

c++ - 调用默认构造函数

转载 作者:太空宇宙 更新时间:2023-11-04 16:10:06 25 4
gpt4 key购买 nike

这个程序给出了正确的输出,但我不明白如何。对象声明时的默认构造函数是如何调用的?

#include <iostream>
using namespace std;
class GuessMe {
private:
int *p;
public:
GuessMe(int x=0)
{
p = new int;
}
int GetX()
{
return *p;
}
void SetX(int x)
{
*p = x;
}
~GuessMe()
{
delete p;
}
};

int main() {
GuessMe g1;
g1.SetX(10);
GuessMe g2(g1);
cout << g2.GetX() << endl;
return 0;
}

最佳答案

这个构造函数有一个默认参数:

GuessMe(int x=0) 

这意味着当 GuessMe 是默认构造时,就好像它是用值为 0 的参数调用的。请注意,构造函数参数未用于代码中的任何内容。另请注意,p 在此处设置为指向未初始化的整数:

p = new int;

所以在调用 SetX() 之前调用 GetX() 会产生未定义的行为。假设您想使用 x 的值来设置 p:

GuessMe(int x=0) 
{
p = new int(x);
}

或者,使用初始化而不是赋值,

GuessMe(int x=0) : p(new int(x))
{
}

此外,请继续阅读 the rule of three以避免双重删除。然后学习在没有指向动态分配对象的原始指针的情况下进行编码。

关于c++ - 调用默认构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29776175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com