默认构造函数

时间:2010-10-26 11:44:16

标签: c++ constructor

我知道默认构造函数会将对象初始化为默认值,但我们如何查看这些值?如果有一个int类型的变量,它应该初始化为0.但是我们如何实际查看构造函数的这些默认值?任何人都可以提供一个代码片段来演示相同的内容吗?

8 个答案:

答案 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

如果您的classint作为属性,则应在每个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等值。 这是你可以知道默认构造函数分配给变量的唯一方法。