我知道默认构造函数会将对象初始化为默认值,但我们如何查看这些值?如果有一个int类型的变量,它应该初始化为0.但是我们如何实际查看构造函数的这些默认值?任何人都可以提供一个代码片段来演示相同的内容吗?
答案 0 :(得分:4)
除非另有说明,否则只有在可用的情况下才使用默认构造函数构造对象。
例如,未初始化整数。
这是巨大麻烦和错误的常见根源,因为它可以有任何价值。
因此规则是,始终初始化变量,对于类,您可以在初始化列表
中执行此操作class A
{
private:
int i;
float f;
char * pC;
MyObjectType myObject;
public:
A() : // the initialisation list is after the :
i(0),
f(2.5),
pC(NULL),
myObject("parameter_for_special_constructor")
{}
}
}
答案 1 :(得分:3)
在C ++中,int
不是class
,并且没有默认(或任何其他)构造函数。
int
不能保证初始化为0
。
如果您的class
有int
作为属性,则应在每个class
的构造函数中显式初始化它(而不仅仅是默认值)。< / p>
class sample
{
private:
int x;
public:
sample()
:x(0)
{
}
sample(const int n)
:x(n)
{
}
sample(const sample& other)
:x(other.x)
{
}
// [...]
};
通过这种方式,您(以及您班级的用户)可以“查看”默认值。
答案 2 :(得分:2)
良好的编码习惯:编写自己的构造函数,以便了解它将如何初始化。这是可移植的,并保证始终具有相同的行为。您的代码将更易于阅读,编译器知道如何提高效率,尤其是在使用特殊符号时:
class Foo
{
public:
Foo() : i(0), j(0) {}
private:
int i;
int j;
};
答案 3 :(得分:1)
AFAIK,如果T
是类型(不一定是类),T()
会返回类型T的默认值。这里是我跑了一个小测试:
int main()
{
char c = char();
int i = int();
cout << "c = " << hex << (int) c << endl;
cout << "i = " << i << endl;
}
输出结果为:
c = 0
i = 0
答案 4 :(得分:0)
默认构造函数不会自动将整数初始化为0.您可以使用括号来指示默认值。
struct X
{
int x;
};
struct X x1; // x1.x is not necessarily 0
struct Y
{
int y;
Y() : y()
{
}
};
struct Y y1; // y1.y will be 0
答案 5 :(得分:0)
显示您的代码
如果你的int值是类的成员。 你必须在你的默认构造函数func
中给它一个值答案 6 :(得分:0)
default constructor
是使用0参数调用可以的。例如
struct X
{
X(int x = 3) //default constructor
{
//...
}
};
它将对象初始化为您对其进行初始化编码的状态。但是,如果你根本没有定义任何构造函数,编译器将尝试为你生成一个默认构造函数 - 而这相当于一个没有参数且没有主体的构造函数。这意味着类/结构类型的所有成员将使用其def进行初始化。 ctors和像int这样的原始类型的所有成员都将保持未初始化状态。请注意,我特别注意到编译器将 尝试 来生成dflt ctor,因为它可能无法执行此操作,例如,当该类的一个或多个成员执行此操作时没有默认的构造函数。 HTH
答案 7 :(得分:0)
创建对象后,立即开始打印ob.x等值。 这是你可以知道默认构造函数分配给变量的唯一方法。