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

问题描述 投票:0回答:2

我想使用 C++ 在堆栈中构造一个对象。 你知道这两种调用构造函数的方式(带括号和不带括号)有什么区别吗:

a)

MyClass object ;

b)

MyClass object() ;

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

谢谢大家提供的信息。

c++ instantiation constructor
2个回答
30
投票

这是 C++ 的陷阱之一。

MyClass object();

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

如果您想调用默认构造函数(即不带参数的构造函数),请使用以下语法:

MyClass object;

另请参阅 Garth Gilmour 对现已删除的问题的回答 您(最不)最喜欢的语法陷阱是什么?

在 C++ 中

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

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.