2012-12-09 134 views
-3

我有一个类和一个函数,返回该类的对象,如果我返回NULL究竟返回什么?将对象返回为null返回什么?

例子:

class someclass { 
    int a; 
    int b; 
    someclass::someclass(int a, int b) { 
     this->a = a; this->b = b; 
    } 
}; 

someclass functionname() { 
    return NULL; 
} 

someclass foo = functionname(); 

因为我没有该类的默认构造函数得到什么回来了?它是一个实际可用的对象吗?或者只是胡言乱语?为什么不能像这样检查?

if (foo == NULL) { 
    something 
} 
+6

这不编译。告诉我们一件事,我们将能够告诉你代码中发生了什么。 – NPE

+0

你的函数不会像编写的那样编译。只有当你返回一个指向你的类的指针,或者你有一个构造函数(没有标记为显式)并且只接受一个int(这样做会产生一个警告,因为它通常是错误的),你将只能返回NULL。 –

回答

0

在C++中,没有实际的空值(但是自从新版本以来有nullptr)。 这意味着,NULL被这样定义:

#define NULL 0 

使得其具有相同的品质为0,数可变,具有。这就是为什么你不能将你的类设置为0.

+0

这是真的,如果没有非显式构造函数在他的破碎示例中采用'int'。 –

0

编译器将不接受此代码。 C++不像JavaC#不会将类实例作为指针(或引用)对待。因此,对于此返回,它将尝试使用代码someclass(NULL)创建someclass的新实例。既然你没有合适的构造函数,就会发生错误。

如果你想为班级一些“缺席”的价值观,无论是程序这里面类(例如,布尔标志),或者使用指针,例如:

someclass* functionname() { 

    if(???) { 
     return new someclass(2,3); 
    } 
    else { 
     return NULL; 
    } 
} 

记得C++不有垃圾收集器,所以你需要在不需要时自己删除new ed对象。

someclass *a; 
a = functionname(); 
... 
delete a; 

忘记这是最令人讨厌的错误C++

0

这个例子更多的是情景描述,而不是实际编译的东西,因此我没有打扰它的验证,因为它与答案无关,我怀疑任何人都有兴趣筛选100行我定义一个类和一个函数。

反正答案是,如果类具有取1个变量(任选地或以其它方式),它会在第一可变使用该构造和初始化对象与0任何构造它可以放入