调用默认构造函数

时间:2011-03-14 14:41:48

标签: c++

class base {
    int i;
public:
    base()
    {
        i = 10;
        cout << "in the constructor" << endl;
    }
};

int main()
{
    base a;// here is the point of doubt
    getch();
}

base abase a()之间的区别是什么?

在第一种情况下,构造函数被调用但在第二种情况下不被调用!

3 个答案:

答案 0 :(得分:24)

第二个是声明一个返回基础对象的函数a()。 : - )

答案 1 :(得分:14)

base a声明类型为a的变量base并调用其默认构造函数(假设它不是内置类型)。

base a();声明一个函数a,它不带参数并返回类型base

这样做的原因是因为语言基本上指定在这种歧义的情况下,任何可以解析为函数声明的东西都应该被解析。对于更复杂的情况,您可以搜索“C ++最烦恼的解析”。

因此,我实际上更喜欢new X;而非new X();,因为它与非新声明一致。

答案 2 :(得分:-3)

在C ++中,您可以通过两种方式创建对象:

  1. 自动(静态)
  2. 动态
  3. 第一个使用以下声明:

    base a; //Uses the default constructor
    base b(xxx); //Uses a object defined constructor
    

    一旦离开当前范围,该对象就会被删除。

    动态版本使用指针,您需要删除它:

    base a = new base(); //Creates pointer with default constructor
    base b = new base(xxx); //Creates pointer with object defined constructor
    
    delete a; delete b;