类中,只要有自定义的构造函数,是不是默认的那个无参构造函数就一定失效了?

问题描述

①如果定义了一个有参数的构造函数,无参数的默认构造函数会失效,要想继续使用无参数的构造函数,必须使用重载重新定义一个无参数的构造函数?②即使在类中自定义了一个无参数的构造函数,原先的那个系统默认的无参构造函数也会失效?综合成一句话:类中,只要有自定义的构造函数,无论是有参数的自定义构造函数还是无参数的自定义构造函数,默认的那个无参构造函数就一定失效了?

解决方案

解决方案二:
应该是这么说如果一个类,你没有定义构造函数,那么系统默认会有一个无参的构造函数但如果你定义了一个有参的构造函数,为了保证正确性,系统不会创建无参构造函数,这时候,如果你还想允许无参构造,就必须显式的声明一个
解决方案三:
就是身在福中不知福,当你忘记写构造函数的时候,编译器帮你生成了一个,仅此而已
解决方案四:
不是,这给你怎么样实例化类有关。自定的构造函数可以理解成方法的重写,也就是参数名称相同,参数类型,数量不同而已。Aa=newA();与inti=10;Aa=newA(i);这肯定是不一样的。
解决方案五:
对的,只要你声明了构造函数,就不会再给你生成默认的构造函数了,并不是无效,而是没有。
解决方案六:
是的,是这样的,默认构造函数在你定义了自己的构造函数以后就没有了
解决方案七:
引用1楼starfd的回复:

应该是这么说如果一个类,你没有定义构造函数,那么系统默认会有一个无参的构造函数但如果你定义了一个有参的构造函数,为了保证正确性,系统不会创建无参构造函数,这时候,如果你还想允许无参构造,就必须显式的声明一个

说的对。其实如果你想在用有参构造函数的同时又能够用无参的构造函数,你可以显示的声明一个无参的构造函数和一个有参的构造函数。(理论上可以声明不同参数或者参数类型不同的构造函数)eg:classA{publicA(){}//无参构造函数publicA(inta){}//带一个参数的构造函数publicA(inta,doubleb){}//带两个参数的构造函数}然后你可以这样去使用classB{AtempA=newA();AtempA1=newA(1);AtempA2=newA(1,2.0);}这样就可以得到类A的三个不同参数的对象了!
解决方案八:
(理论上可以声明N多个不同参数或者参数类型不同的构造函数)
解决方案:
C#的实例化类的语法是使用new运算符,为防止错误,如果没写构造函数,编译器会自动创建一个如果写了构造函数,默认的就不再自动创建
解决方案:
是的,只要你定义了一个或多个构造函数(不管是有参的的还是无参的),默认的就没了
解决方案:
构造函数也是可以重载的。。。。你实例化的时候用什么参数,就用构造器就调用哪个构造函数。

时间: 2025-01-30 00:00:53

类中,只要有自定义的构造函数,是不是默认的那个无参构造函数就一定失效了?的相关文章

类中数据库访问-求php开发中数据库连接创建和关闭的较好时机问题

问题描述 求php开发中数据库连接创建和关闭的较好时机问题 刚刚学php不久,在用php写一个毕业设计,可是在数据库连接的地方犯了难, 最开始用的是配置文件的方法, 在config.inc.php中设置了数据库连接的一些参数,比如说数据库名密码等等, 然后在db.conn.php中创建一个mysqli对象,连接上数据库,并设置它的编码. 后来在应用的过程中发现特别麻烦,每次都要用include将这些文件导入,然后再使用 $db进行数据库的访问,可是后来在一些类中处理,打算在构造函数中创建数据库连

解析C++中构造函数的默认参数和构造函数的重载_C 语言

C++构造函数的默认参数 和普通函数一样,构造函数中参数的值既可以通过实参传递,也可以指定为某些默认值,即如果用户不指定实参值,编译系统就使形参取默认值. [例] #include <iostream> using namespace std; class Box { public : Box(int h=10,int w=10,int len=10); //在声明构造函数时指定默认参数 int volume( ); private : int height; int width; int l

PHP类中的魔术方法(Magic Method)简明总结_php实例

1. __construct()和__destruct() 在实例被 创建/销毁 的时候被调用,都可以传递0个或多个参数. class A { function A() { echo "build A"; } function __destruct() { echo "destroy A"; } } $obj = new A(); //unset($obj); Note:The destructor method will be called as soon as

visual studio 2010-VS2010 MFC一个自定义类如何调用一个对话框类中的成员变量

问题描述 VS2010 MFC一个自定义类如何调用一个对话框类中的成员变量 我从一个对话框定义了几个CString类型的edit控件,我现在写一个类想调用该对话框中的创建的edit控件变量.怎么办啊 解决方案 字符串: getdlgitem(id)->getwindowtext() 数字 getdlgitemid(id) 解决方案二: 把那个对话框的CString变量变成public的,然后就可以直接用了,当然你需要先知道你那个对话框的指针. 解决方案三: 黑马程序员---定义一个包含私有成员变

在WinForm,自定义类中添加 System.Timers.Timer控件,为什么不能正常进行

问题描述 在自定义类中加入System.Timers.Timertimergamebegin;System.Timers.Timertimersendpoker;在构造函数中:publicMyClass(){this.timergamebegin=newSystem.Timers.Timer(Desk.addpointtimes*1000);timergamebegin.Elapsed+=newSystem.Timers.ElapsedEventHandler(this.timergamebeg

java中父类与子类, 不同的两个类中的因为构造函数由于递归调用导致栈溢出问题

/* 对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中, 并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行 */ import static java.lang.System.out; public class PersonDemo { public static void main(String[] args) { //*********测试父类与子类之间的循环调用的问题 out.println("main1&quo

Struts2框架,表单请求到action出错,貌似找不到自定义action类中的方法。

问题描述 Struts2框架,表单请求到action出错,貌似找不到自定义action类中的方法. 关键代码如下: ${Msg.sendUser.username } 上面代码的意思是:把${Msg.sendUser}提交到action,赋值给 action类属性message的sendUser.(sendUser数据类型是User对象) 请求后提示找不到action中的自定义方法,但是我表单中的值换成下面 的,变成赋值给message的属性sendUser的属性username,就能成功. 是

在类中使用string类的问题。我定义的构造函数,想把字符串赋给string对象,却实现不了。

问题描述 在类中使用string类的问题.我定义的构造函数,想把字符串赋给string对象,却实现不了. //12.2.ano.h #ifndef STRING2_H_ #define STRING2_H_ #include #include using std::string; using std::cout; using std::cin; using std::endl; class String { private : string str; public : String(); Str

基类-在MFC中如何使用自定义类

问题描述 在MFC中如何使用自定义类 我建立了MFC的对话框,并自定义了基类是static的派生类,在派生类中有自定义了许多函数,我在对话框中要使用该自定义类,怎么才能使用呢?工具条上没有该自定义的控件啊 解决方案 感觉你是想自定义控件,解决方法如下:1.新建一个MFC Application,选择Dialog based,其他一路默认就行了.2.把Custom Control 放到Dialog中.3.把控件属性Class,写成"MFCDiagramCtrl",这里很重要,如果不加,最