
C++中不带参数的构造函数和带参数的构造函数是可以同时出现的。
理由如下:
1
C++中发明了一种函数重载技术,也就是允许多个函数名相同,但是参数的个数或者类型不一样。
2
C++类的构造函数是允许重载的,带参数的构造函数和不带参数的构造函数满足了函数重载的需求。
3
但是在一个类产生一个对象的时候,只会选做其中一个构造函数。
每次写实体类的时候,都要写一次无参数的构造函数,再写一次有参数的构造函数
------解决方案--------------------------------------------------------
估计你没用到hibernate 把,hibernate 的hql 语句有个功能,如下
String hql = select new Student(id,name,age,birth) from entityStudent ;
List Student list = queryexecuteQuery(hql)list();
用到Student(int id,String name,int age,Date birth)这个构造函数。。
而且有参数的构造函数,可以方便赋值,比如要创建一个Student,就不用通过setId setName
setAge 了,
直接Student s = new Student(1,'bill',20,'2000-2-2');就可以拉。。
------解决方案--------------------------------------------------------
定义类,该类的对象必定有相应的属性。
定义好类之后,要想使用该类就应该创建该类的实例。
构造一个类的实例;应该做:
1、为对象分配内存空间;
2、初始化对象中的成员变量
3、通过调用类的构造方法来创建该对象
而带参构造函数就可以做到初始化成员变量,这样用很是方便。
1代码如下:#include
#include
using
namespace
std;
class
foo
{
public:
explicit
foo(
int
id=0
)
:
id_(id)
{
cout
<<
__FUNCTION__
<<
"
"
<<
id_
<<
endl;
}
~foo()
{
cout
<<
__FUNCTION__
<<
"
"
<<
id_
<<
endl;
}
private:
int
id_;
};
int
main()
{
int
a[2]
=
{
0,
1
};
//
第一种方法
{
foo
b[2]
=
{
foo(a[0]),
foo(a[1])
};
}
cout
<<
"-----------------"
<<
endl;
//
第二种方法
{
char
_b_buf_[
sizeof(foo)2
];
foo
(&b)[2]
=
(foo(&)[2])_b_buf_;
for(
size_t
i=0;
i<2;
++i
)
{
new(&b[i])
foo(
a[i]
);
}
//
use
b
for(
size_t
i=0;
i<2;
++i
)
{
b[2-1-i]~foo();
}
}
cout
<<
"-----------------"
<<
endl;
//
这估计就是你要的了,和第二种方法一样
{
foo
p
=
(foo)operator
new(
sizeof(foo)2
);
for(
size_t
i=0;
i<2;
++i
)
{
new(&p[i])
foo(
(int)i
);
}
//
use
b
for(
size_t
i=0;
i<2;
++i
)
{
p[2-1-i]~foo();
}
operator
delete(
p
);
}
return
0;
}
2C++
new用法之一
new运算符
最常用的是作为运算符的new,比如:
string
str
=
new
string(“test
new”);
作为运算符,new和sizeof一样,是C++内置的,你不能对它做任何的改变,除了使用它。
new会在堆上分配一块内存,并会自动调用类的构造函数。
C++
new用法之二
new函数
第二种就是new函数,其实new运算符内部分配内存使用的就是new函数,原型是:
void
operator
new(size_t
size);
new函数返回的是一个void指针,一块未经初始化的内存。如你所见,这和C语言的malloc行为相似,你可以重载new函数,并且增加额外的参数,但是必须保证第一个参数必须是size_t类型,它指明了分配内存块的大小,C++允许你这么做,当然一般情况下这是不必要的。如果重载了new函数,在使用new *** 作符时调用的就是你重载后的new函数了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)