c++中不带参数的构造函数和带参数的构造函数可以同时出现吗?

c++中不带参数的构造函数和带参数的构造函数可以同时出现吗?,第1张

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函数了。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/13492210.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存