A. 构造函数的有参和无参的区别,构造函数的参数是派什么用场的
区别:
1.如果在创建对象时不写参数,调用的就是无参的构造方法。可是如果你写的有有参的构造方法,而没有无参的构造方法,那么再“创建对象时不写参数”就会报错,程序会认为你知道该怎么做。
如果构造方法有参数,在创建对象时传入了参数,那么就会调用此方法,这一点和重载类似。
2.没有参数的构造函数就是默认构造函数。
有参数的构造函数可用传递的参数给类中的属性赋初始值或执行初始化操作例如订阅事件等。
构造函数是在创建给定类型的对象时执行的类方法。构造函数具有与类相同的名称,它通常初始化新对象的数据成员。
任何时候,只要创建类或结构,就会调用它的构造函数。类或结构可能有多个接受不同参数的构造函数。构造函数使得程序员可设置默认值、限制实例化以及编写灵活且便于阅读的代码。
如果没有为对象提供构造函数,则默认情况下 C# 将创建一个构造函数,该构造函数实例化对象,并将所有成员变量设置系统指定的默认值。静态类和结构也可以有构造函数。
主要特点
1.构造函数的命名必须和类名完全相同。在java中普通函数可以和构造函数同名,但是必须带有返回值;
2.构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的;
3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;
4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的。而一般的方法不存在这一特点;
5.构造函数有回滚的效果,构造函数抛出异常时,构造的是一个不完整对象,会回滚,将此不完整对象的成员释放(c++)
6.当一个类只定义了私有的构造函数,将无法通过new关键字来创建其对象,当一个类没有定义任何构造函数,C#编译器会为其自动生成一个默认的无参的构造函数。
B. 对于一个类如果不定义构造方法,编译器默认一个无参的构造方法,代码中会显示出吗
不会,不过可以通过反汇编查看,但是如果你定了一个构造函数(无参获带参的)那么原先默认的构造函数将自动被注销
C. C++中,默认构造函数、无参构造函数、带有默认值的构造函数,究竟怎么区分
默认构造函数就是:在你不提供任何构造函数的情况下,系统给出的一个不带参数,不包含函数代码的构造函数。
在创建对象时调用构造函数,构造函数来初始化成员变量。可以有多个构造函数,他们的区别就是参数不同。所有可以用不同的构造函数初始化一个对象。
默认构造函数,就是调用构造函数时,不必给出实参的构造函数。
在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数。例:
Box(int =10,int =10,int =10);1
Box();2
Box(int,int);3
若有以下定义语句:
Box box1;//是调用上面的第一个默认参数的构造函数,还是第二个默认构造函数
Box box2(15,30);//是调用上面的第一个默认参数的构造函数,还是第三个构造函数
(3)编译器生成的构造函数一定是无参的扩展阅读:
第2个构造函数是最基本,最原始的构造函数;第1个就是形参都已默认,指定了的构造函数,调用时实参可以传过去1个,2个,3个,甚至0个数据。
比如,第一个语句:Box box1;我们可以认为他是直接调用第2个构造函数,也可以认为他是调用了第1个构造函数,只不过没有实参传递过去而已,这样就产生了歧义。
同理,第二个语句,我们可以理解为它调用了第3 个构造函数。但同时,理解为它调用第1个构造函数,只不过仅传过去2个实参,也是可是说得通的。这也就产生了歧义。
事实上,上面3个函数中任意一个都可以说是另两个的重载函数,那么“在一个类中定义了全部是默认参数的构造函数后,不能再定义重载构造函数”就很好容易理解了
D. C++ 编译时如何根据是否存在无参构造函数决定是否调用该构造函数
根据你创建对象的方式,决定调用构造函数的类型
例如BASE a(10) BASE a
前者调用有一个参数的构造函数,后者调用无参数的构造函数
在类的声明中如果你没有写构造函数,编译器会为你提供一个无参数的默认构造函数
如果你声明了构造函数,编译器就不会给你提供无参数的构造函数
例如
class BASE {
}
class BASE{
BASE(int){}
}
前者会默认生成一个BASE(){}的构造函数、
后者则不会
如果你用后者去声明一个对象
那么你就必须为这个对象提供参数
如果你使用BASE a;声明对象,就会报错。
因为编译器没有给提供无参数的构造函数
希望我的解答能够帮助到你,如满意,请采纳
E. 构造函数问题!
在C++中, 如果类中没有定义构造函数, 那么编译器会自动生成一个默认的构造函数, 但是, 只要类里有定义一个或多个构造函数, 那么编译器就不会生成构造函数。
类里没有定义缺省的构造函数,并不表明没有有参数的构造函数,编译器会不会生成缺省的构造函数是不确定的,所以你提的那句话是错的。
F. C++类中 是不是一定会有构造函数呢编译器生成的构造函数是不是一定能,初始化所以类中的成员
hh,是这样的,只要你不定义类的对象,系统就不会调用构造函数(无论是系统的构造函数还是个人自己定义的),但是这个构造函数(系统的)是存在的,函数体是空的,什么都不干,只是把对象初始化为一个特定的状态
G. 缺省的构造函数就是没有参数的构造函数吗
缺省就是默认,当你没有为一个类显示定义构造函数时,编译器会默认给你生成一个无参构造函数。
H. 构造函数和默认构造函数有什么区别
1.
构造函数的定义:
构造函数
,是一种特殊的方法。主要用来在创建对象时初始化对象,
即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数
,可根据其参数个数的不同或参数类型的不同来区分它们
即构造函数的重载。
2.
构造函数什么时候使用:
在创建对象时调用构造函数,构造函数来初始化成员变量。可以有多个构造函数,他们的区别就是参数不同。所有可以用不同的构造函数初始化一个对象。
3.
默认的构造函数:
无参数,就是
对象1 = new 类1();4.
自己定义的构造函数:
有参数,比如
class A{
int a;
A();//默认是这样
A(int aa){
a = aa;
};//自定义是这样
}
对象aaa = new A();//默认构造
对象bbb = new A(250);// 自定义构造5.
自定义的构造函数可以灵活地初始化类内成员
I. Java构造函数 为什么需要无参构造函数
补充下楼上的回答~~“但是如果你创造了一个带有参数的构造方法,那么无参的构造方法必须显式的写出来,否则会编译失败"这句话有点不妥,应该这么理解:每个类至少要有一个构造函数,如果你自己构建了一个带有参数的构造函数而没有再显示的写出无参的构造函数也是可以的,不过当你尝试通过一个无参的构造函数来构建(new)时,此时编译器才会报错,因为找不到这个无参的构造函数。也就是说当一个类你没有给他构造函数,则编译器会自动补上一个无参的,若有的话就不会,你需要显示将此无参的构造函数写出来。
另一个问题:无参的构造函数,只是为了比较好的构造类(new),具体情况要根据你的类是如何设计的,呵呵。
J. 请问在Java类中, 什么是无参的构造函数和默认的构造函数呢
当类没有声明构造方法的时候,就会使用默认的构造方法, 这个默认的构造方法就是“无参构造方法”
当类声明了有参构造方法的时候,默认构造方法就失去了本身的作用。
publicclassClient{
publicstaticvoidmain(String[]args){
//声明一个Cls3
Cls3cls3;
//获取Cls3对象有两种方式
{
cls3=newCls3();//使用无参构造对象
cls3=newCls3("有参");//使用有参构造对象
}
//声明一个Cls2
Cls2cls2;
//获取Cls2对象
{
//cls2=newCls2();//因为cls2只有一个有参构造方法,使用无参构造方法构造对象会出现编译错误。
cls2=newCls2("有参");//使用有参构造对象
}
//声明一个Cls1
Cls1cls1;
{
cls1=newCls1();//使用无参构造对象
}
}
}
//定义一个默认构造方法的类
classCls1{
}
//定义一个有参的构造方法类
classCls2{
Cls2(Stringarg){
}
}
//定义一个有参和无参两个构造方法的类
classCls3{
Cls3(){
}
Cls3(Stringarg){
}
}