2011-03-14 143 views
12
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()有什么区别?调用默认构造函数

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

回答

18

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

11

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

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

其原因是因为该语言基本上指定,在这种模糊不清的情况下,任何可以解析为函数声明的东西都应该被解析。您可以搜索“C++最令人头疼的解析”,以了解更复杂的情况。

因此,我实际上更喜欢new X;而不是new X();,因为它符合非新声明。

  1. 自动(静态)
  2. 动态

第一个使用以下声明:

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

-1

在C++中,您可以通过以下两种方式创建对象该对象一旦离开当前范围就会被删除。

动态版本使用指针,你必须充电将其删除:)

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

delete a; delete b; 
+1

不应该说,它是'基地* A =新基地('? – Sid 2013-04-29 23:23:18

+4

这个答案是否真的与问题相关?你没有解决'base b()' – narengi 2015-06-23 02:38:56