我有一个类和一个返回该类对象的函数,如果我返回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
}
答案 0 :(得分:0)
在C ++中,没有实际的null(但是自新版本以来有nullptr
)。
这意味着NULL定义如下:
#define NULL 0
因此它具有与0,数字变量相同的品质。这就是为什么你不能把你的班级设置为0。
答案 1 :(得分:0)
编译器不接受此代码。与C++
和Java
不同的C#
不会将类实例视为指针(或引用)。因此,对于此返回,它将尝试使用代码someclass
创建someclass(NULL)
的新实例。由于您没有适当的构造函数,因此会发生错误。
如果你想让这个类有一些“缺席”值,可以在类中编程(例如,作为布尔标志)或使用指针,例如:
someclass* functionname() {
if( ??? ) {
return new someclass(2,3);
}
else {
return NULL;
}
}
请记住C++
没有垃圾收集器,因此您需要在不需要时自行删除new
ed对象。
someclass *a;
a = functionname();
...
delete a;
忘记这是C++
中最烦人的错误。
答案 2 :(得分:0)
这个例子更多的是一种情境描述,而不是应该实际编译的东西,因此我没有费心去验证它,因为它与答案无关,我怀疑任何人都会对筛选我定义的100行感兴趣一个类和一个函数。
无论如何,答案是如果类有任何带有1个变量的构造函数(可选地或其他),它将使用该构造函数并在其可以适合的第一个变量中用0初始化对象