C ++对象实例化

时间:2016-01-07 14:58:41

标签: c++ c++11 default-constructor

这个问题是关于C ++中的对象实例化。有几种方法可以在堆上和堆栈上实例化对象我很想知道细微的差别。

using namespace std;

class Raisin
{
private:
    int x;
public:
    Raisin():x(3){}
    Raisin(int input):x(input){}
    void printValue()
    {
       cout<< "hey my Deliciousness is: " << x <<endl;
    }
};

基本上Raisin是我用于此演示的简单类:

int main()
{

Raisin * a= new Raisin;
a->printValue();

Raisin * b= new Raisin{};
b->printValue();

Raisin * c= new Raisin();
c->printValue();

Raisin x;
x.printValue();

Raisin y{};
y.printValue();

Raisin z();
z.printValue(); 
//error: request for member 'printValue' in 'z', 
//which is of non-class type 'Raisin()'


Raisin alpha(12);
alpha.printValue();

Raisin omega{12};
omega.printValue();

return 0;
}

我想知道为什么Raisin * c可以用空括号进行实例化,但Raisin z不能。 (实际上Raisin z()合法但不正确)

我也理解Raisin (2)Raisin{2}之间存在细微差别。如果有人能够了解这些特质,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

这一行

Raisin z();

声明一个函数(没有参数)返回一个Raisin对象,而不是一个默认构造的Raisin