首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的对象声明不调用默认构造函数?

对象声明不调用默认构造函数的原因可能有以下几种情况:

  1. 对象声明时使用了自定义的构造函数:如果在对象声明时使用了自定义的构造函数,那么默认构造函数将不会被调用。自定义构造函数可以根据需要初始化对象的成员变量或执行其他操作。
  2. 对象声明时使用了初始化列表:初始化列表可以在对象声明时对成员变量进行初始化,而不是在构造函数体内进行初始化。如果对象声明时使用了初始化列表,那么默认构造函数也不会被调用。
  3. 对象声明时使用了拷贝构造函数:如果对象声明时使用了拷贝构造函数,那么默认构造函数也不会被调用。拷贝构造函数用于创建一个新对象,并将已有对象的值复制给新对象。
  4. 对象声明时使用了移动构造函数:如果对象声明时使用了移动构造函数,那么默认构造函数同样不会被调用。移动构造函数用于将一个对象的资源所有权转移给另一个对象,通常用于提高性能和效率。

总结起来,对象声明不调用默认构造函数的原因是因为在声明对象时使用了自定义构造函数、初始化列表、拷贝构造函数或移动构造函数。这些方式可以根据需要对对象进行初始化或进行其他操作,从而满足特定的需求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Kotlin】Kotlin 构造函数 ( 主构造函数 | 主构造函数声明属性 | init 初始化代码块 | 次构造函数 | 构造函数委托 | 调用构造函数创建实例对象 )

构造函数 ( 常用情况 ) VII . 次构造函数 ( 没有主构造函数 ) VIII . 构造函数 代码执行顺序 IX . 调用构造函数 / 次构造函数 创建类实例对象 I ....主构造函数声明属性 ---- 在类中声明属性可以在类中使用 var / val 属性名称 : 属性类型 声明属性 , 也可以在主构造函数声明属性 ; ① 正常构造函数 : 构造函数是普通构造函数..., 类属性字段在类体中定义 ; /* 主构造函数声明属性 ; */ class Student constructor(name : String, age : Int){ var...; /* 主构造函数声明属性 ; */ class Student constructor(var name : String, var age : Int){ } III . init...调用构造函数 / 次构造函数 创建类实例对象 ---- 1 .

3.1K10

JavaScript this 小结纯粹函数调用作为对象方法调用作为构造函数调用apply 调用

JavaScript 语言一个关键字。 它是函数运行时,在函数体内部自动生成一个对象,只能在函数体内部使用。 ? 上面代码中,函数test运行时,内部会自动有一个this对象可以使用。...下面分情况,详细讨论 纯粹函数调用 函数最通常用法,属全局性调用,this即代表全局对象。 ?...运行结果是1 作为对象方法调用 函数还可以作为某个对象方法调用,这时this就指这个上级对象 ? 结果:1 作为构造函数调用 通过这个函数,可以生成一个新对象。this就指这个新对象。 ?...运行结果为1 为了表明这时this不是全局对象,我们对代码做一些改变: ? 运行结果为2,表明全局变量x值根本没变。 apply 调用 apply()是函数一个方法,作用是改变函数调用对象。...它第一个参数就表示改变后调用这个函数对象。因此,这时this指就是这第一个参数。 ? apply()参数为空时,默认调用全局对象。因此,这时运行结果为0,证明this指的是全局对象

2.6K20

创建子类对象时,父类构造函数调用被子类重写方法为什么调用是子类方法?

public static void main(String[] args) { A a = new A(); B b = new B(); } } 问题:为什么创建...A对象时候父类会调用子类方法?...但是:创建B对象父类会调用父类方法? 答案: 当子类被加载到内存方法区后,会继续加载父类到内存中。...当子类对象创建时,会先行调用父类构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。 但是:由于java语言是静态多分派,动态单分派。...其结果是当编译时候,父类构造方法调用方法参数已经强制转换为符合父类方法参数了。 上边代码在编译前已经转换为下面这个样子了。

6.1K10

关于Java构造函数(Constructor)常见问题总结1 为什么调用子类构造方法时候,默认调用父类构造方法2 常见错误:Implicit super constructor is und

1 为什么调用子类构造方法时候,默认调用父类构造方法 看下面这个简单例子: package cc; public class Sub extends Super { public Sub...这就是为什么我们上面的那个例子程序会先调用super构造方法。 但要切记,** 虽然调用了父类构造方法,但只创建了一个对象也就是子对象。...Paste_Image.png 构造函数使用规则 简单说,在使用时候,子类构造函数必须调用父类构造函数,不管有没有显示声明。所以,被调用父类构造函数,一定在定义好!...为什么Java在一个类已经实现了一个带参构造函数时候,不实现默认无参构造函数? 这是个很有趣问题。...我们知道如果在一个类中没有声明一个构造函数,那么编译器会隐式帮我们实现一个无参构造函数,但如果我们一旦一个构造函数,不管带不带参数,那么编译器都不会提供默认构造函数,所以这么做原因是为什么呢?

2.6K30

【C++】继承 ⑧ ( 继承 + 组合 模式对象 构造函数 和 析构函数 调用规则 )

一、继承 + 组合 模式对象 构造函数和析构函数调用规则 1、场景说明 如果一个类 既 继承了 基类 , 又 在类中 维护了一个 其它类型 成员变量 , 那么 该类 构造 与 析构 , 就需要涉及到...类 本身 构造函数 和 析构函数 , 父类 构造函数 和 析构函数 , 类 成员变量 构造函数 和 析构函数 ; 2、调用规则 在 继承 + 组合 情况下 , 构造函数 与 析构函数 调用规则如下..." << endl; } ~C() { cout << "C 析构函数调用" << endl; } public: int z; D d; }; 可根据下面的调用规则 , 分析出 C 类对象中..., 涉及到 父类构造/析构函数 , 自身构造/析构函数 , 成员变量 构造/析构函数 调用顺序 ; 构造函数调用顺序 : 父类 -> 成员 -> 自身 ; 析构函数调用顺序 : 自身 -> 成员...; A 和 B 构造函数 , 是 父类构造函数 ; D 构造函数 , 是 成员构造函数 ; C 构造函数 , 是 自身构造函数 ; 构造函数调用顺序为 : 父类 -> 成员 -> 自身 , 符合上述调用原则

15810

【C++修行之道】类和对象(二)类6个默认成员函数构造函数、析构函数

对象实例化时编译器自动调用对应构造函数构造函数可以重载。...Date d2(2015, 1, 1); // 调用带参构造函数 // 注意:如果通过无参构造函数创建对象时,对象后面不用跟括号,否则就成了函数声明 // 以下代码函数声明了d3函数,该函数无参...d对象调用了编译器生成默认构造数,但是d对象_year/_month/_day,依旧是随机值。也就说在这里编译器生成默认构造函数并没有什么用?...确保成员变量正确初始化:自动生成构造函数调用成员变量默认构造函数,确保 MyQueue 中两个 Stack 对象在 MyQueue 对象创建时被正确初始化。...,为什么最后会调用Time类析构函数

6910

【C++】匿名对象 ③ ( 函数返回值为对象值时 匿名对象 拷贝构造函数 与 析构函数 调用情况分析 )

赋值 , 此时 编译器 会将 匿名对象 值赋值给 已存在变量 , 并且立刻销毁该匿名对象 ; 2、拷贝构造函数回顾 在 【C++】拷贝构造函数调用时机 ① ( 使用一个对象初始化另外一个对象 |...将一个对象赋值给另外一个对象 ) 【C++】拷贝构造函数调用时机 ② ( 对象值作为函数参数 | 对象值作为函数返回值 ) 博客中 , 分析了 拷贝构造函数 调用时机 ; " 拷贝构造函数 " 又称为...逐条分析 构造函数 / 拷贝构造函数 / 析构函数 调用过程 : 调用带参数构造函数 m_age = 12 这是在 fun 函数中 , 调用 有参构造函数 , 创建 普通对象 ; 调用拷贝构造函数 这是在...逐条分析 构造函数 / 拷贝构造函数 / 析构函数 调用过程 : 调用带参数构造函数 m_age = 18 这是在 main 函数中 , 调用 有参构造函数 , 创建 普通对象 ; 调用带参数构造函数...m_age = 12 这是在 fun 函数中 , 调用 有参构造函数 , 创建 普通对象 ; 调用拷贝构造函数 这是在 fun 函数中 , 函数返回对象值时 , 创建 要返回 普通对象副本 , 也就是一个

25220

深入理解javascript中继承机制(2)临时构造函数模式Uber – 从子对象调用对象接口将继承部分封装成函数

为了解决前文提到将共有的属性放进原型中这种模式产生对象覆盖掉父对象同名属性问题,就出现了另一种模式,我们称作为临时构造函数模式 临时构造函数模式 我们具体通过代码来分析 function Shape...F,然后将Shape构造函数原型对象赋给F原型。...Uber – 从子对象调用对象接口 传统面向对象编程语言都会有子对象访问父对象方法,比如java中子对象调用对象方法,只要直接调用就可以得到结果了。...,给每个构造函数天价了一个uber属性,同时使他指向父对象原型,然后更改了ShapetoString函数,更新后函数,会先检查this.constructor是否有uber属性,当对象调用toString...时,this.constructor就是构造函数,找到了uber属性之后,就调用uber指向对象toString方法,所以,实际就是,先看父对象原型对象是否有同String,有就先调用它。

1.6K20

【C++】C++ 类中 this 指针用法 ③ ( 全局函数 与 成员函数 相互转化 | 有参构造函数设置默认参数值 | 返回匿名对象与返回引用 )

return s; } 详细代码 , 参考最后完整代码示例 ; 二、有参构造函数设置默认参数值 ---- 为 Student 类定义了有参构造函数 , 则其默认无参构造函数 , 就不会生成...执行 Student 构造函数" << endl; } 此时 , 如果要创建 Student 对象 , 只能调用上述 有参构造函数 , 如果使用 Student s2 方式调用 默认构造函数 创建...Student 对象 , 就会报错 ; 如下带参数构造函数 , 并且为其 有参构造函数 参数 设置一个默认值 , 此时就可以使用 类名 对象方式定义对象变量 ; class Student...+ s2.age; s.height = this->height + s2.height; // 注意 : 返回是一个匿名对象 return s; } 如果返回新对象 , 而是将...创建 Student 实例对象 Student s(18, 180); // 打印对象情况 s.print(); // 调用有参构造函数 , 有参构造函数参数使用默认值 Student s2

17820

【C++】运算符重载 ⑨ ( 等号 = 运算符重载 | 调用默认浅拷贝构造函数情况分析 | 等号 = 运算符重载 与 拷贝构造函数 各自使用场景 | 等号 = 操作符重载步骤 )

, 并支持链式操作 ; 一、等号 = 运算符重载 ---- 1、调用默认浅拷贝构造函数情况分析 C++ 编译器 为 类 提供 默认 拷贝操作 , 是对 成员变量 简单拷贝 , 是 浅拷贝 ;...在 【C++】深拷贝和浅拷贝 ③ ( 浅拷贝内存分析 ) 博客中 , 对浅拷贝进行了分析 , 使用 类对象 为 另一个对象 初始化时 , 会自动调用 拷贝构造函数 ; // 调用有参构造函数 , 创建...Student 实例对象 Student s(18, "Tom"); // 声明 Student 对象 s2 , 并使用 s 为 s2 赋值 // 该操作会调用 默认拷贝构造函数 //...拷贝构造函数 各自使用场景 等号 = 运算符重载 与 拷贝构造函数 各自使用场景 : 拷贝构造函数 : 如果 使用对象 为一个 新对象 进行初始化 , 调用是拷贝构造函数 ; 等号 = 运算符重载 :...(); // 声明 Student 对象 s2 , 并使用 s 为 s2 赋值 // 该操作会调用 默认拷贝构造函数 // C++ 编译器提供拷贝构造函数 只能进行浅拷贝 Student

21020

调用Thread类方法:public final String getName() 为什么得到线程对象名称默认是:Thread-0、Thread-1、Thread-2、...呢?

调用Thread类方法:public final String getName() 为什么得到线程对象名称默认是:Thread-0、Thread-1、Thread-2、...呢?...main(String[] args) { 10 // 创建线程对象 11 // 无参构造 12 MyThread my1 = new MyThread...(); } } 由以上可知,由MyThread my1 = new MyThread(); 第一次调用无参构造时候,就会去父类thread 调用位无参构造,而父类无参构造是一系列init...同理,MyThread my2 = new MyThread(); 第二次调用无参构造时候,就会去父类thread 调用位无参构造,而父类无参构造是一系列init() 方法,最终得到 Thread...-1,启动线程后,再通过Thread类getName()方法得到线程对象名称。

78120

类和对象竟是这样(下集)

一.初始化列表 其实大家可能会问,诶前面不是讲了有构造函数这个东西吗?为什么又要搞一个初始化列表出来。...其实根据其名字可以知道初始化列表是用来初始化,在构造函数中,其实并不能算是初始化,只能算赋值,因为构造函数可以多次调用,而初始化只能一次。...3.explicit关键字 构造函数不仅可以构造与初始化对象,对于单个参数或者除第一个参数无默认值其余均有默认构造函数,还具有类型转换作用。 而加上explicit修饰后,就不能类型转换了。...静态成员为所有类对象所共享,不属于某个具体对象,存放在静态区 (2). 静态成员变量必须在类外定义,定义时添加static关键字,类中只是声明 (3)....静态成员也是类成员,受public、protected、private 访问限定符限制 (6).静态成员函数不可以调用非静态成员函数,非静态成员函数可以调用静态成员函数 三.友元 五.匿名对象

7010

openFoam源码中C++

,但声明变量是需要用到该模板类型,这时候就要用到模板类前置声明 可以看到操作符重载参数列表里用到了Field,这就必须进行前置声明,可能此时大家又有疑问,为什么操作符重载也要进行前置声明呢...有这样一条规定:友元函数和运算符前向声明:如果一个模板类里调用了友元函数(外面定义方法可以使用该类里面的私有变量),而且这个友元函数里面的参数还用到了这个模板类,那么就得提前以模板方式去声明这个类和函数...这里explict解释总结如下: C++中explicit关键字只能用于修饰只有一个参数构造函数, 它作用是表明该构造函数是显示, 而非隐式, 跟它相对应 另一个关键字是implicit..., 意思是隐藏,类构造函数默认情况下即声明为 implicit(隐式).explicit声明之后,外面调用构造函数必须显式声明, 因为构造器若只有一个参数并且默认是implicit,在外面调用时候可以直接等于...: 如果类设计者写复制构造函数, 编译器就会自动生成复制构造函数

88630

构造函数浅析

声明默认(缺省)构造函数, 也同时声明了带默认参数构造函数.错误.因为存在暧昧构造函数调用....不带任何参数构造函数称为默认(缺省)构造函数.如果违背了规则中第三条,将会引起编译错误.必须声明为public型.(思考:为什么?)....规则四:调用顺序规则: 1. 在创建一个对象时自动地调用一个构造函数. 2. 在创建一个派生类对象时,首先执行基类构造函数,然后执行派生类成员对象构造函数,最后才执行派生类构造函数....规则五:定义对象规则: 只有当没有声明构造函数或者声明了缺省构造函数时,或者声明了带默认参数构造函数时,我们才能不指定实参来定义类对象....X a(); // 编译错误 被编译器解释为定义了一个没有参数,返回一个X类型对象函数.用缺省构造函数初始化类对象正确声明是去掉括号.而不是调用缺省构造函数. 规则六:拷贝构造函数: 1.

77430

C++之类和对象

构造函数可以重载也支持缺省参数 如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参默认构造函数,但一旦用户显式定义编译器将不再自动生成; 构造函数对内置类型处理,对自定义类型调用自定义类型自身默认构造...可以看到,我们写编译器确实会有一个构造函数来初始化,不过这个初始化出来数太随机值了,看起来就像乱码一样。这是为什么?...而C++引入了析构函数作为默认成员函数,它会在程序结束时由编译器自动调用完成资源释放(与构造函数并不是开辟空间类似,析构函数并不是销毁对象,销毁对象是由编译器来进行),与构造函数正好相反。...析构函数不能重载) 4.对象生命周期结束时,C++编译系统系统自动调用析构函数; 5.析构函数对内置类型处理,对自定义类型调用它自身析构函数 可以看到,虽然没有调用析构函数,但是编译器在...2.如果显示写了初始化列表,那么编译器就会调用显示写;否则对于内置类型编译器会使用随机值来初始化,对于自定义类型的话编译器就会去调用默认构造函数,如果没有默认构造函数编译器就会报错: 可以看到对于内置类型

1.1K00

js 中构造函数构造函数作用,构造函数和普通函数区别

大家好,又见面了,是你们朋友全栈君。...2、如果直接调用函数,那么,this对象指向window,并且,不会默认返回任何对象(除非显性声明返回值)。...4、构造函数返回值 构造函数执行过程最后一步是默认返回 this 。言外之意,构造函数返回值还有其它情况。 没有手动添加返回值,默认返回 this。...所以,虽然封装构造函数过程会比较麻烦,但一旦封装成功,我们再创建对象就会变得非常轻松,这也是我们为什么要使用构造函数原因。...逐个执行函数代码 D、将新建对象作为返回值 6、构造函数返回值默认是this 也有其他情况 。

3.4K10

C++ 初阶 类和对象(中)

妈妈再也不用当心忘记初始化类了~ 1.2构造函数特性 1. 无返回值。 2.函数名与类名相同。 3. 对象实例化时编译器自动调用对应构造函数。 4. 构造函数可以重载。...,那么编译器就不会采用你写声明,而是会去直接调用你写构造函数,假设你这个构造函数没写完,那就会报错。...如图: 屏蔽掉之后就可以正常使用声明 总结一下: 总的来说,默认构造函数就是指传参也可以调用函数,如全缺省。...,test并没有创建属于它析构函数,但它自己就去调用了它自定义类型成员默认构造函数,使得对应数据被初始化。...一若未显式定义,系统会自动生成默认析构函数。注意:析构函数不能重载 4. 对象生命周期结束时,C++编译系统系统自动调用析构函数

13110

【C++】类和对象核心总结

其实空类中是有东西,他有编译器默认生成6个成员函数,如果我们主动去写默认成员函数,编译器是会自动生成他们。 1.构造函数 对象初始化≠对象创建 函数名与类名相同。 无返回值。...编译器对于内置类型处理,对于自定义类型会调用构造函数,这个构造函数既有可能是默认构造也有可能是无法完成初始化工作构造函数。 c....针对编译器处理内置类型这样漏洞,C++11做出了补丁,即内置类型成员变量在类中声明时可以给出默认值,但需要注意是虽然我们肉眼可见是定义出了一个个变量,但原则还是不能变,类依旧是不占用内存,给出声明只有在实例化对象时候...2.自定义类型,初始化列表会调用默认构造函数,如果没有默认构造函数就会报错。 所以尽量用初始化列表来初始化,因为无论你写写初始化列表,所有的成员变量在进入构造函数之前都要走一遍初始化列表。...静态成员变量必须在类外定义,定义时添加static关键字,类中只是声明 非static成员函数可以调用静态成员函数,因为非静态属于某个特定对象,而静态被该类所有对象共享,那么通过某个具体对象来访问所有对象共享内容当然是可以

69830

C++构造函数作用_c++什么是构造函数

PS:写在前面 就是构造函数作用可以这样理解,如果没有构造函数就是类里边只是声明了成员变量,成员函数,还有最后对象,这样你在对该对象进行初始化赋值时就比较麻烦就得先调用成员函数对成员变量赋值,成员变量进而作用到对象上...,再说了没有参数也可以对成员变量赋值把它赋值为0嘛,这个时候就不需要参数就是固定写死就是要给他赋值为0,所以没有参数构造函数照样具有很巨大意义。)...函数调用结束后,局部变量占用存储空间就被回收,以便分配给下一次函数调用中涉及局部变量。 为什么不将局部变量自动初始化为全 0 呢?...默认构造函数 如果用户自己没有定义构造函数,那么编译器会自动生成一个默认构造函数,只是这个构造函数函数体是空,也没有形参,也执行任何操作。...以前我们就是这样做,创建对象时都没有写括号,其实是调用默认构造函数。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。

1.4K20
领券