s*****1 发帖数: 134 | 1 c++中,定义一个class Foo,
class Foo{
int* array;
public:
Foo(int size){
array = new int[size];
}
}
假设别人调用这个构造函数,如果调用时赋值size<0 那么就出错了,为了避免这种情
况,该怎么办?
另外,如果是java,遇到这种情况,又该怎么办?
谢谢啦~ |
p*****p 发帖数: 379 | 2 c++里=0也不行吧
所以干嘛不用vector? |
s*****1 发帖数: 134 | 3 恩,我想问的是:
如果构造函数中的某参数不符合要求,并会引起问题,该怎么办?
我这个只是个例子~ |
l*********8 发帖数: 4642 | 4 Foo(size_t size)
【在 s*****1 的大作中提到】 : c++中,定义一个class Foo, : class Foo{ : int* array; : public: : Foo(int size){ : array = new int[size]; : } : } : 假设别人调用这个构造函数,如果调用时赋值size<0 那么就出错了,为了避免这种情 : 况,该怎么办?
|
r**********g 发帖数: 22734 | 5 首先, 用vector
其次,因为我有强迫症,你这个new 了没delete,赶紧加上。
最后,即使是用size_t 还是要检查 size == 0. if size == 0, result is undefined
【在 s*****1 的大作中提到】 : c++中,定义一个class Foo, : class Foo{ : int* array; : public: : Foo(int size){ : array = new int[size]; : } : } : 假设别人调用这个构造函数,如果调用时赋值size<0 那么就出错了,为了避免这种情 : 况,该怎么办?
|
s*****1 发帖数: 134 | 6 好的,先谢谢各位回答~
我的例子只是个例子,请大家不要纠结于此例子,希望能有比较泛化的答案~
我想问的是
在java 和 c++ 中, 如果需要判定初始构造函数参数的条件, 并有可能发生参数条件
不符的情况,该如何处理? 不只针对此例
谢谢啦 |
p*****p 发帖数: 379 | 7 throw exception
或者按默认参数来
【在 s*****1 的大作中提到】 : 好的,先谢谢各位回答~ : 我的例子只是个例子,请大家不要纠结于此例子,希望能有比较泛化的答案~ : 我想问的是 : 在java 和 c++ 中, 如果需要判定初始构造函数参数的条件, 并有可能发生参数条件 : 不符的情况,该如何处理? 不只针对此例 : 谢谢啦
|
r**********g 发帖数: 22734 | 8 java的话throw exception就行了。
不过我一直觉得构造函数如果复杂的话是非常evil的,因此我都倾向于用factory。如
果觉得复杂可以不用新建class,搞一个static 函数即可
class C
{
private:
int *m_arr ;
C(size_t size) { m_arr = new int[size];}
public:
static C* Construct(size_t size)
{
if(size == 0)
return NULL;
else
return new C(size);
}
}
【在 s*****1 的大作中提到】 : 好的,先谢谢各位回答~ : 我的例子只是个例子,请大家不要纠结于此例子,希望能有比较泛化的答案~ : 我想问的是 : 在java 和 c++ 中, 如果需要判定初始构造函数参数的条件, 并有可能发生参数条件 : 不符的情况,该如何处理? 不只针对此例 : 谢谢啦
|