一构造函数和普通函数的三个不同点
1、构造函数也是一个普通函数,创建方式与普通函数一样(构造函数习惯上首字母大写)。
2、构造函数和普通函数的主要区别在于:调用方式不一样。作用也不一样(构造函数用来新建实例对象)
3、调用方式不一样。
a 普通函数的调用方式:
直接调用 child();
b构造函数的调用方式:
需要使用new关键字来调用 new Child();
二构造函数的函数名与类名相同:Child() 这个构造函数,Child 既是函数名,也是这个对象的类名。(这一点和java的构造方法类似)
三内部用this 来构造属性和方法
四构造函数的执行流程
五普通函数例子:
因为没有返回值,所以为undefined
六构造函数:构造函数会马上创建一个新对象,并将该新对象作为返回值返回。(下面的案例没有成员属性,对象的属性都没有的情况)
七使用instanceof 可以检查一个对象是否是一个类的实例,如是则返回true;
所有对象都是Object对象的后代,
所以任何对象和Object做instanceof都会返回true
区别:
1如果在创建对象时不写参数,调用的就是无参的构造方法。可是如果你写的有有参的构造方法,而没有无参的构造方法,那么再“创建对象时不写参数”就会报错,程序会认为你知道该怎么做。
如果构造方法有参数,在创建对象时传入了参数,那么就会调用此方法,这一点和重载类似。
2没有参数的构造函数就是默认构造函数。
有参数的构造函数可用传递的参数给类中的属性赋初始值或执行初始化 *** 作例如订阅事件等。
构造函数是在创建给定类型的对象时执行的类方法。构造函数具有与类相同的名称,它通常初始化新对象的数据成员。
任何时候,只要创建类或结构,就会调用它的构造函数。类或结构可能有多个接受不同参数的构造函数。构造函数使得程序员可设置默认值、限制实例化以及编写灵活且便于阅读的代码。
如果没有为对象提供构造函数,则默认情况下 C# 将创建一个构造函数,该构造函数实例化对象,并将所有成员变量设置系统指定的默认值。静态类和结构也可以有构造函数。
扩展资料主要特点
1构造函数的命名必须和类名完全相同。在java中普通函数可以和构造函数同名,但是必须带有返回值;
2构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的;
3构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的;
4当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数此默认构造函数是不带参数的。而一般的方法不存在这一特点;
5构造函数有回滚的效果,构造函数抛出异常时,构造的是一个不完整对象,会回滚,将此不完整对象的成员释放(c++)
6当一个类只定义了私有的构造函数,将无法通过new关键字来创建其对象,当一个类没有定义任何构造函数,C#编译器会为其自动生成一个默认的无参的构造函数。
参考资料:
这是拷贝构造函数。
构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值
总与new运算符一起使用在创建对象的语句中 特别的一个类可以有多个构造函数 可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载
构造函数与其他方法的区别
1构造函数的命名必须和类名完全相同;而一般方法则不能和类名相同
2构造函数的功能主要用于在类的对象创建时定义初始化的状态它没有返回值,也不能用void来修饰这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择而其他方法都有返回值即使是void返回值,尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的
3构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用,一般方法在程序执行到它的时候被调用
4当定义一个类定义的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略不去Java编译器会提供一个默认的构造函数此默认构造函数是不带参数的而一般方法不存在这一特点
补充:
构造函数的名字必须与类名相同,而且不可以有返回值,也不能有return 语句。
构造函数往往执行一些初始化的 *** 作。
构造函数只是起初始化值的作用,但实例化一个对象的时候,可以通过实例去传递参数,从主函数传递到其他的函数里面,这样就使其他的函数里面有值了。规则,只要你一实例化对象,系统自动回调用一个构造函数,就是你不写,编译器也自动调用一次。
析构函数与构造函数的作用相反,用于撤销对象的一些特殊任务处理,可以是释放对象分配的内存空间;
特点:析构函数与构造函数同名,但该函数前面加~。
析构函数没有参数,也没有返回值,而且不能重载,在一个类中只能有一个析构函数。
当撤销对象时,编译器也会自动调用析构函数。
每一个类必须有一个析构函数,用户可以自定义析构函数,也可以是编译器自动生成默认的析构函数。一般析构函数定义为类的公有成员。
你的父类写了有参构造方法后,你没写无参构造方法,而调用子类构造方法时要调用父类的构造方法,默认的是调用无参构造方法,而你父类中没有无参构造方法,所以报错;
当你在父类写上无参构造方法后,就不会报错了 ;你在子类构造方法里写上父类有的有参构造方法,父类里有 也不会报错,就通过编译了
调用父类的构造方法 只能在子类的构造方法里 ,而且是在子类构造方法的第一行;在其他方法里就会报错了
super 在构造方法里能调用父类的构造方法,只能写在第一行
用法:super(); super(参数列表)
在其他(不包括主方法)里可以调用父类的方法
用法:super父类的方法名(有参数的参数写在这括号里); super属性名;
方法名和属性名都是非私有的才能被调用
java构造方法也就是java构造函数,方法举例如下图:
java构造函数一般用来初始化成员属性和成员方法的,即new对象产生后,就调用了对象了属性和方法。
在现实生活中,很多事物一出现,就天生具有某些属性和行为。比如人一出生,就有年龄、身高、体重、就会哭;汽车一出产,就有颜色、有外观、可以运行等。这些,我们就可以将这些天然的属性和行为定义在构造函数中,当new实例化对象时,也就具有这些属性和方法了,没必要再去重新定义了,从而加快了编程效率。
扩展资料:
java构造函数的特点:
1、函数名与类名相同
2、不用定义返回值类型。(不同于void类型返回值,void是没有具体返回值类型;构造函数是连类型都没有)
3、不可以写return语句。(返回值类型都没有,也就不需要return语句了)
-java 构造函数
1、C++是从早期的C语言逐渐发展演变来的,与C语言相比,它在求解问题方法上最大的改进是( B )。
A. 面向过程 B 面向对象 C 安全性 D 复用性
2、下列关于this指针的叙述中,正确的是( )
A任何与类相关的函数都有this指针
B类的成员函数都有this指针
C类的友元函数都有this指针
D类的非静态成员函数才有this指针
3、若有以下类Z声明,函数fStatic的正确定义是( )。
class Z
{ int a;
public:
void fStatic(Z&)static;
};
Avoid Z::fStatic(Z &objZ){ objZa=0; }
Bvoid Z::fStatic(Z &objZ){ a= objZa; }
Cvoid Z::fStatic(Z &objZ){ a=0; }
Dvoid Z::fStatic(Z &objZ){ Z::a=0; }
4、在C++中,关于下列设置缺省参数值的描述中,( C )是正确的。
A.不允许设置缺省参数值;
B.只能在函数的定义中指定参数的缺省值;
C.在指定了缺省值的参数右边,不能出现没有指定缺省值的参数;
D.设置缺省参数值时,必须全部都设置;
5、关于友元函数的描述中,错误的是( D )。
A.友元函数说明在类体内
B.友元函数不是成员函数
C.友元函数必须用对象来引用
D.友元函数可以直接访问类中的私有成员
6、对于类,下面哪个是不正确的( D )。
A 类是对象的设计蓝图
B 使用关键字Class创建类结构
C 类被声明后,类名成为类型名并且可以用来声明变量
D 类与结构体相同,它们之间没有区别
7、下列是构造函数的特点,( C )是错误的。
A构造函数是一种成员函数,它具有一般成员函数的特点。
B构造函数的名称与其类名相同。
C构造函数必须指明其类型。
D一个类中可以定义一个或多个构造函数。
8、已知:p是一个指向类A数据成员m的指针,a是类A的一个对象。在给m赋值为5的下列表达式中,( D )是正确的。
A ap=5
B a->p=5
C ap=5
D ap=5
9、下面对静态数据成员的描述中,正确的选项是( C )。
A静态成员可以在类体内进行初始化
B静态数据成员不可以被类的对象调用
C静态数据成员可以直接用类名调用
D静态数据成员不可以直接用类名调用
10、下列关于new运算符的描述中,错误的是( B )。
Anew运算符组成的表达式的值是地址值
B创建对象时不调用构造函数
C用它创建的对象须用delete来删除
D可用它来创建动态的对象和对象数组
2和3题目本身有问题,问问出题的人:
关于2,this是指向类对象本身的指针,和任何成员包括函数扯不上关系,不过通过this指针可以引用除静态成员以外的任何成员
关于3,fStatic是静态函数,不能引用任何非静态成员,因为这些成员只存在于类对象中。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)