使用点运算符访问构造函数

时间:2013-06-13 05:45:28

标签: c++

我是c ++的初学者,我试图通过创建一个对象并通过点运算符访问它来访问构造函数方法。在这个过程中我遇到了错误。这是正常的吗?我只是想尝试一下。如果有办法做同样的事情请让我知道程序,我用谷歌搜索但找不到任何解决方案。下面是代码。

#include <iostream>

using namespace std;

class box
{
  public:
    box(double );
  private:
    double width;
};

 box::box(double w)
{
  cout<<"\n I'm inside the constructor ";
  width=w;
}


box::~box()
{
  cout<<"\n I'm inside the desstructor ";

}


int main()
{
  box box1;
  box1.box(10);
}

3 个答案:

答案 0 :(得分:5)

是的,这是正常的,你不能手动调用构造函数。这不是一个功能。在已经构造的对象上调用c-tor是没有意义的。

因为构造函数没有名称,所以它们是 在名字查找期间从未找到;但是使用功能表示法的显式类型转换(5.2.3) 将导致调用构造函数来初始化对象。 [注意:用于初始化类类型的对象 见12.6。 - 尾注]

答案 1 :(得分:3)

首先请注意,您的代码甚至无法编译。我们将在一分钟内完成。

这一行:

box box1;

尝试创建一个盒子对象。之后 ; box1是一个完全成熟的盒子对象。好吧,如果代码可以编译的话。但它不能因为box没有默认构造函数。你不能创建一个没有参数的盒子实例 - 你必须给它一个double。在下一行中,您尝试这样做,但为时已晚 - 构造函数仅在创建对象时调用。

所以你必须这样做:

box box1(10.0);

答案 2 :(得分:2)

构造一个对象然后再次调用它的构造函数是没有意义的。

该行

box box1;

创建一个实例并调用其默认构造函数。

创建后,您无法再次创建相同的实例。你可能正在寻找的是一个任务操作员,而不是一个建设者。