类的构造函数可以重载(Java函数重载只适用于构造函数吗一般的类的方法可以重载吗)

:暂无数据 2026-08-18 19:10:02 :0

类的构造函数可以重载(Java函数重载只适用于构造函数吗一般的类的方法可以重载吗)

本篇文章给大家谈谈类的构造函数可以重载,以及Java函数重载只适用于构造函数吗一般的类的方法可以重载吗对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

本文目录

Java函数重载只适用于构造函数吗一般的类的方法可以重载吗

方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。一般的方法完全可以重载。
同时注意和重写的区别,重写就是在子类中把父类本身有的方法重新写一遍,在方法名,参数列表,返回类型(包括子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写。

同一个类中的构造函数可以重载,重载的构造函数可以通过什么方法相互调用

比如你有两个属性name和age,那么可以定义一个空参构造函数,一个单参函数,还有双参函数,那么当你使用name和age来调用双参构造函数时,可以调用单参构造函数!!

在一个类中定义了全部是默认参数的构造函数后,再定义重载构造函数编译器会不会报错

当创建对象时,如果只给出了一部分参数,系统不能判断是调用有默认参数的构造函数还是调用重载构造函数,比如构造函数有5个默认参数,在类中还定义了构造函数的重载,重载构造函数有3个参数,当创建对象时只给出了三个参数,系统就不能判断是调用有默认参数的构造函数还是只有3个参数的重载构造函数,就会出现二义性,系统就会报错。

什么是构造函数构造函数可以重载吗为什么

与类名称具有一样名称的成员函数是构造函数。构造函数不能有返回值,甚至不能有return语句。说明一个有返回值的构造函数是错误的,取构造函数的地址也是错误的。
如果一个类有构造函数,在程序中每个该类类型的对象在使用之前由此构造函数进行初始化(有关初始化的更多信息参见本章后面的“用特殊成员函数进行初始化”)。

构造函数是在对象的创建点上被调用的。创建对象可以是:

* 全局对象(文件范围或外部链接的)。

* 在一个函数或者小的封闭块中的局部变量。

* 用new运算符创建的动态对象。new操作在程序的堆或自由存储区中分配一个对象。

* 因显式调用构造函数而创建的临时对象(详见本章后面的“临时对象”)。

* 因编译器隐含调用构造函数而创建的临时对象(详见本章后面的“临时对象”)。

* 其它类的数据成员。在创建类类型的对象时,若此类类型由其它类类型变量组成,将会引起该类中每个对象的创建。

* 一个类的基类子对象。创建派生类类型的对象时会引起基类构件的创建。

构造函数的作用

一个构造函数执行各种任务,但对于程序员来说,这些任务是不可见的,你甚至可以不必为构造函数写任何代码。这些任务都同建立一个完全的、正确的类类型对象实例有关。

在MS C++中(同样也在很多其它C++中)一个构造函数:

* 初始化对象的虚拟基指针(vbptr)。如果该类是由虚拟基类派生出的,则这一步要执行。

* 按说明的顺序调用基类和成员的构造函数。

* 初始化对象的虚拟函数指针(vfptr)。如果该类有或者继承了虚拟函数,则这一步要执行,虚拟函数指针指向类的虚拟函数表(v-table),并且使虚拟函数的调用同代码正确绑定(binding)。

* 在构造函数体中执行可选的代码。

当构造函数结束以后,所分配的存储器就是一个给定类类型的对象。因为构造函数执行这些步骤,故虚拟函数的“迟后绑定”形态可以在虚拟函数的调用点得以解决,构造函数也要构造基类以及构造组合对象(作为数据成员的对象),迟后绑定是C++实现对象的多态行为的机制。

说明构造函数的规则

构造函数具有同类名相同的名称。只要遵守重载函数的规则(有关详情参见第12章“重载”),可以说明多个构造函数。

语法

类名称(参量说明表opt) cv-修饰符表opt

C++定义了两种类型的构造函数,缺省的和拷贝的构造函数。如表11.2所述。

表11.2 缺省的和拷贝构造函数

构造函数的种类 参量 目的
缺省构造函数 可以无参量调用 构造一个类类型的缺省对象
拷贝构造函数 可以接受对同种类类型的引用作为唯一参量 拷贝类类型的对象

缺省构造函数不要参量即可调用,但你可以说明一个带有参量表的缺省构造函数,只要让所有的参量有缺省值即可。同样,拷贝构造函数必须接受同一类类型的引用作为唯一参量。但可以提供更多的参量,只要后续的参量具有缺省值即可。

如果你不提供任何构造函数,编译器会试图生成一个缺省的构造函数。同样,如果你没有提供拷贝构造函数,编译器也会试图产生一个。编译器产生的构造函数视为公有的成员函数。如果你说明一个拷贝构造函数,而其第一个参量是一个对象而不是一个引用,则会产生错误。

编译器生成的缺省构造函数建立对象(初始化vftables和vbtables,如前面所述),并调用基类及成员的缺省构造函数,但不会采取其它的行动。基类和成员的构造函数只要存在,是可访问的,并且是无二义性的就会被调用。

编译器生成的拷贝构造函数建立一个对象,并且采用一个成员方式的拷贝来复制要被拷贝的对象的内容。如果基类或成员的构造函数存在,则它们将被调用,否则,就采取位方式的拷贝。

如果所有的基类和该类类型的成员类具有接受一个常量参量的构造函数,则编译器生成的拷贝构造函数接受一个唯一的参量的类型是const type&;否则,编译器生成的拷贝构造函数接受的唯一参量的类型是type &。

你可以用一个构造函数去初始化一个const和volatile对象,但构造函数本身不能说明为const和volatile的。对于构造函数唯一合法的存储类型inline,对于构造函数使用任何其它的存储类修饰符,包括__declspec关键字都会引起错误。构造函数和析构函数除了__stdcall外不能说明为其它的调用约定。

派生类是不能继承基类中的构造函数的。当一个派生类的对象在创建的时候,它是从基类构件开始构造的,然而才进入派生类构件。编译器使用每个基类的构造函数作为完整对象初始化的一部分(除了虚拟派生有所不同,参见本章后面的“初始化基类”)。

显式地调用构造函数

在程序中,为创建给定类型的对象,可以显式地调用构造函数。例如:创建两个Point型对象的描述一条线段的端点,可以写如下代码:

DrawLine(Point(13,22),Point(87,91);

创建了两个Point对象,传递给DrawLine函数,并在该表达式(函数调用)结束后拆除。

另外一个显式地调用构造函数的情况是在一个初始化中:

Point pt=Point(7,11);

创建了一个Point类型的对象,并用接受两个整形参量的构造函数进行初始化。如前面的两个例子中,通过显式地调用构造函数创建的对象是无名的对象,并在它们所创建的表达式中是有生存期的。在本章后面的“临时对象”中将对这一点进行深入的讨论。 在构造函数内调用成员函数和虚拟函数

在构造函数里面调用任何成员函数通常是很安全的,因为在执行第一行用户代码之前,对象已经完全建立起来了(已经初始化了虚表等等)。但是当成员函数调用了其抽象基类的虚拟成员函数时,在构造函数和析构函数调用此成员函数存在着潜在的不安全性。

构造函数可以调用虚拟函数。在调用虚拟函数时,被调用的是在构造函数自身的类中定义的函数(或者从其基类中继承的函数)。下面的例子显示了一个虚拟函数在一个构造函数中被调用时发生的情况。

#include 《iostream.h》
class Base
{
public:
Base();//缺省构造函数
virtual void f(); //虚拟成员函数
};
Base::Base()
{
cout《《“Constructing Base sub-object\n “;
f();//在构造函数中调用虚拟成员函数
}
void Base::f()
{
cout《《“called Base::f()\n“;
}
class Derived:public Base
{
public:
Derived();//缺省构造函数
void f(); //该类虚拟函数的实现
};
Derived::Derived()
{
cout《《“constructing Derived object\n“;
}
void Derived::f()
{
cout《《“Called Derived::f()\n“;
}
void main()
{
Derived d;
}
在上面的程序运行的时候,Derived d的说明会引发下列一系列事件:

1. 类Derived的构造函数(Derived::Derived)被调用。

2. 在进入到Derived类的构造体之前,基类Base的构造函数被调用。

3. Base::Base调用函数f,它是一个虚拟函数。通常被调用的函数会是Derived::f,因为对象d是Derived类型的对象。但因为Base::Base是一个构造函数,此时的对象是一个Derived类型的对象,故Base::f将会被调用。

构造函数与数组

数组的构造只能使用缺省的构造函数。缺省构造函数要么不接受任何参量,要么对于它的所有参量都有缺省的值。数组通常是按升序来构造的,该数组的每一个成员的初始化都是使用同一构造函数。

构造的次序

对于派生类或其成员数据是类类型的类,构造发生的顺序有助于你理解,在任一给定的构造函数中你能够使用对象的哪一部分。

构造与继承

一个派生类的对象是从基类到派生类通过按次序为每个类调用构造函数来构造的。

每个类的构造函数能仅依赖于被完全构造好的它的基类。

有关初始化的完整描述,包括初始化的顺序,见本章后面的“初始化基类及成员”。

构造与组合类型

含有类类型数据成员的类称为组合类。当创建一个组合类类型的对象时,含有类的构造函数在该类的构造函数之前调用。 有关这种情况的初始化,见本章后面的“初始化基类及成员”。

java语言的构造函数有什么作用构造函数可以重载吗举例说明

构造函数是当你创建对象时,由系统调用的;

可以重载

例子

public Class Person{
    String name = null;
    public Person(){};//无参构造函数
    public Person(String name){//有参构造函数,重载
        this.name = name;
    }
}
class Test{
    public static void main(String args){
        Person p1 = new Person();//创建名字为null的人对象,调用无参构造函数
        Person p2 = new Person(“小明“);//创建名字为小明的对象,调用有参构造函数
    }
}

构造函数是否可重载和继承举例说明

可以在Java中,在实际运用中,当创建一个类时,可能因为需求不同,要创建具有不同的初始值的不同对象,就可以通过重载构造方法来实现。一个类中可以定义多个构造方法,他们方法名相同,只是参数个数、类型、顺序不同而已。class Num{ int Num1; int Num2; public Num(){//不带参数的构造函数 Num1=100; Num2=200; } public Num(int Num1,int Num2){//带2个参数的构造函数 this.Num1=Num1; this.Num2=Num2; } public void display(){ System.out.println(“Num1=“+Num1+“Num2=“+Num2); } public class Demo{ public static void main(String args){ Num num=new Num(); num.display(); NUm num2=new Num(10,20){ num2.display(); } 而继承就是继承成员,包括成员属性和成员方法;

关于类的构造函数可以重载到此分享完毕,希望能帮助到您。

类的构造函数可以重载(Java函数重载只适用于构造函数吗一般的类的方法可以重载吗)

本文编辑:admin

更多文章:


菜鸟工具html在线(菜鸟在线学习HTML5可靠吗)

菜鸟工具html在线(菜鸟在线学习HTML5可靠吗)

“菜鸟工具html在线”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看菜鸟工具html在线(菜鸟在线学习HTML5可靠吗)!

2026年10月12日 00:10

固态硬盘初始化磁盘?用过的硬盘怎么初始化

固态硬盘初始化磁盘?用过的硬盘怎么初始化

大家好,关于初始化磁盘很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于固态硬盘初始化磁盘的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

2026年10月11日 23:40

consul(如何用Consul打造弹性可扩展的PaaS平台)

consul(如何用Consul打造弹性可扩展的PaaS平台)

今天给各位分享如何用Consul打造弹性可扩展的PaaS平台的知识,其中也会对如何用Consul打造弹性可扩展的PaaS平台进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月11日 23:20

php购物车实现(商品放入购物车时减库存,购物车在20分钟后,清除所有商品,这个时候库存重新加上去,PHP怎么实现)

php购物车实现(商品放入购物车时减库存,购物车在20分钟后,清除所有商品,这个时候库存重新加上去,PHP怎么实现)

今天给各位分享商品放入购物车时减库存,购物车在20分钟后,清除所有商品,这个时候库存重新加上去,PHP怎么实现的知识,其中也会对商品放入购物车时减库存,购物车在20分钟后,清除所有商品,这个时候库存重新加上去,PHP怎么实现进行解释,如果能

2026年10月11日 23:00

vba数组添加元素(EXCEL_VBA 如何添加数组元素)

vba数组添加元素(EXCEL_VBA 如何添加数组元素)

大家好,vba数组添加元素相信很多的网友都不是很明白,包括EXCEL_VBA 如何添加数组元素也是一样,不过没有关系,接下来就来为大家分享关于vba数组添加元素和EXCEL_VBA 如何添加数组元素的一些知识点,大家可以关注收藏,免得下次来

2026年10月11日 22:40

Windows窗口太多怎么处理我是电脑小白?当在桌面上打开多个窗口时,若要在不同的窗口之间切换,该如何操作

Windows窗口太多怎么处理我是电脑小白?当在桌面上打开多个窗口时,若要在不同的窗口之间切换,该如何操作

本篇文章给大家谈谈多窗口,以及Windows窗口太多怎么处理我是电脑小白对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年10月11日 21:40

linux分区(linux 如何分区才好)

linux分区(linux 如何分区才好)

这篇文章给大家聊聊关于linux分区,以及linux 如何分区才好对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

2026年10月11日 21:20

数控车床编程入门自学视频教程(请问有没有广数数控车床编程入门然后提高的视频教程)

数控车床编程入门自学视频教程(请问有没有广数数控车床编程入门然后提高的视频教程)

各位老铁们好,相信很多人对数控车床编程入门自学视频教程都不是特别的了解,因此呢,今天就来为大家分享下关于数控车床编程入门自学视频教程以及请问有没有广数数控车床编程入门然后提高的视频教程的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一

2026年10月11日 21:10

oracle恢复数据文件(系统重装过了,但是oracle所有文件都在,我想数据恢复回来怎么弄)

oracle恢复数据文件(系统重装过了,但是oracle所有文件都在,我想数据恢复回来怎么弄)

其实oracle恢复数据文件的问题并不复杂,但是又很多的朋友都不太了解系统重装过了,但是oracle所有文件都在,我想数据恢复回来怎么弄,因此呢,今天小编就来为大家分享oracle恢复数据文件的一些知识,希望可以帮助到大家,下面我们一起来看

2026年10月11日 20:30

canvas drawimage(qq浏览器支持canvas的drawimage方法吗)

canvas drawimage(qq浏览器支持canvas的drawimage方法吗)

大家好,canvas drawimage相信很多的网友都不是很明白,包括qq浏览器支持canvas的drawimage方法吗也是一样,不过没有关系,接下来就来为大家分享关于canvas drawimage和qq浏览器支持canvas的dra

2026年10月11日 19:50

最近更新

热门文章

标签列表