在C ++中构造对象的不同方法

时间:2010-02-22 03:37:29

标签: c++ instantiation constructor

我想使用C ++在堆栈中构造一个对象。 你知道这些与调用构造函数的方法有什么区别(有和没有括号):

A) MyClass object ;

b)中 MyClass object() ;

我正在使用MFC,在构建主应用程序的全局变量时,如果我使用后一种方式,我会得到一个例外,我认为这两种方式是等价的。

谢谢你们的任何信息。

2 个答案:

答案 0 :(得分:21)

这是C ++的其中一个问题。

MyClass object();

是在C ++中定义函数 prototype 的方式,因此编译器认为你试图在另一个函数的中间声明另一个函数。

如果要调用默认构造函数(即不带参数的构造函数),请改用此语法:

MyClass object;

另见Garth Gilmour对现已删除的问题What is your (least) favorite syntax gotcha?的回答:

  

在C ++中

Employee e1("Dave","IT"); //OK
Employee e2("Jane"); //OK
Employee e3(); //ERROR - function prototype

答案 1 :(得分:9)

例如:

class MyClass
{
   public:
   MyClass()
   {x = 0;}
   MyClass(int X)
   {x = X;}
   private:
   int x;
};

int main()
{
   MyClass myObject(56); // initialize x to value '56'
   MyClass myObject2; //calls default constructor and initializes x to 0
   return 0;
}