那个超好看的桌面背景景好看???

扫二维码下载作业帮
2亿+学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿+学生的选择
C#中构造函数的作用我知道构造函数分为 不带参构造函数和带参构造函数,前面一个是默认的构造函数。我想请问他们在使用过程中有什么样的区别?各自有什么样的作用?请稍微详细的回答,可以拓展点相关知识,根据回答会酌情加分,若果简单2句话,不给分。
天堂圣魂丶鶤噚
扫二维码下载作业帮
2亿+学生的选择
构造函数 是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值
总与new运算符一起使用在创建对象的语句中 特别的一个类可以有多个构造函数 可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载构造函数与其他方法的区别
1.构造函数的命名必须和类名完全相同;而一般方法则不能和类名相同.
2.构造函数的功能主要用于在类...
共同点:都是实例化对象,初始化数据的默认构造是说所有的类都从祖先object那继承了空参的构造方法,你不写与写空参构造都存在,而有参数的构造一般是自己写的,写就有不写就没有,它的作用和空参的一样,只是它里面可以有参数,给你个例子来说明吧有一个类Monitor它有属性SStringwidthpublic Monitor(){...
简单的来说构造函数就是用来创建对象用的,说的专业些叫实例化对象。定义:class A{public A(){}}使用:A a=new A();//在这里,A()就是就是构造函数。需要注意的一点是,如果类里面没有定义构造函数,编译器也会自动生产一个空构造函数,类的各个成员都赋上默认值。但是如果在类里面只定义了一...
构造函数分为动态构造函数和静态构造函数。动态构造函数是类或结构实例化时,为其分配内存空间,完成类或结构当中成员变量的初始化工作。动态构造函数可以重载,即相同构造函数名称拥有不同类型和数目的多个构造函数。带参数的构造函数和不带参数的构造函数没有本质区别,带参数的构造函数可以通过传入的变量控制或者直接初始化其中的成员变量,在构造函数中可以为成员变量初始化默认值。静态构造函数不允许携...
为您推荐:
扫描下载二维码C++默认构造函数 - zdd - 博客园
随笔 - 201, 文章 - 65, 评论 - 1709, 引用 - 0
默认构造函数
默认的构造函数是指为所有参数都提供了默认值的构造函数,通常是指无参的构造函数。比如下面的类Test,它的默认构造函数就是Test()。
class Test
Test(){} // default constructor
如果你没有为你的类提供任何构造函数,那么编译器将自动为你生成一个默认的无参构造函数。一旦你为你的类定义了构造函数,哪怕只是一个,那么编译器将不再生成默认的构造函数。
为你的类提供默认的构造函数
有很多原因,列举如下:
1. 当你使用静态分配的数组,而数组元素类型是某个类的对象时,就要调用默认的构造函数,比如下面的代码。
Object buffer[10]; // call default constructor
2. 当你使用动态分配的数组,而数组元素类型是某个类的对象时,就要调用默认的构造函数,比如下面的代码,如果Object没有默认的构造函数,是无法通过编译的,因为new操作符要调用Object类的无参构造函数类初始化每个数组元素。
Object* buffer = new Object[10];
3. 当你使用标准库的容器时,如果容器内的元素类型是某个类的对象时,那么这个类就需要默认的构造函数,原因同上。
vector&Object&
4. 一个类A以另外某个类B的对象为成员时,如果A提供了无参构造函数,而B未提供,那么A则无法使用自己的无参构造函数。下面的代码将导致编译错误。
B(int i){}
int main(void)
A a(); // error C2512: 'B' : no appropriate default constructor available
getchar() ;
return 0 ;
再比如下面的代码,类A定义了拷贝构造函数,而没有提供默认的构造函数,B继承自A,所以B在初始化时要调用A的构造函数来初始化A,而A没有默认的构造函数,故产生编译错误。
A(const A&){}
class B : public A
int main(void)
B //error C2512:'B': no appropriate default constructor available
getchar() ;
return 0 ;构造方法和普通方法有什么不同? 1、构造方法可以定义在另一个类中,普通方法不能; 2、构造方法必无返回值 3、构造方法在创建对象时直接赋值,普通方法不行 4、功能不同,构造方法用于创建一个对象,普通方法用来描述这个对象能做什么 我总结的对吗?还有其他相同或者不同吗?
构造方法和普通方法有什么不同?
1、构造方法可以定义在另一个类中,普通方法不能;
2、构造方法必无返回值
3、构造方法在创建对象时直接赋值,普通方法不行
4、功能不同,构造方法用于创建一个对象,普通方法用来描述这个对象能做什么 我总结的对吗?还有其他相同或者不同吗?
非常感谢!
写下你的评论...
非常感谢!
写下你的评论...
写下你的评论...
Copyright (C)
All Rights Reserved | 京ICP备 号-21052人阅读
c++ primer(13)
& & & &书上提到没有定义构造函数时进行显式初始化成员,我很纳闷,不是说没有定义构造函数的时候会合成默认构造函数吗,自己查了下,果然查到了一下转载的内容:不是未定义构造函数就一定会合成默认构造函数的!
& & & &转自:
& & & &假期间闲来无事,就下载了某大师的VC++视频资料。在讲到C++时,说是如果程序员没有自己定义默认构造函数,那么编译器会自动为我们产生一个默认的构造函数。 本来这个错误的认识很多程序员都有,不足为奇。但有这么多年编程经验的高手也有这样的错误认识就不禁让我哑然了。
& & & & 其实编程语言和我们所用的任何软件没有区别,例如Photoshop、AutoCAD之类。其唯一不同的是我们用的编程语言是基于编译器的,而应用软件是基于我们的编程语言的。
& & & & 既然我们所用的软件是基于编译器的,那么理解编译器在背后到底为我们做了些什么、在什么情况下做了哪些事情就显得异常重要。这就像Photoshop会为你产生一些基本图形例如矩形、三角形之类,而不会凭空产生一些风景优美的图片一样。
& & & & 在《C++ Annotated Reference Manual(ARM)[ELLIS90]》中的Section 12.1告诉我们:&Default constructors...在需要的时候被编译器产生出来&。
& & & & 其实默认构造函数也是分为两类的:有用的、无用的。
& & & & 所谓有用的标准也是就默认构造函数会为我们的类做一些初始化操作。那么无用的就不会做任何工作,从而对我们的类也就没有任何意义。所以,我们通常所说的默认构造函数是指有用的默认构造函数,其英文名字叫nontrivial default constructor。
& & & & 那么到底什么时候编译器会为我们产生nontrivial default constructor呢?有下面四中情况:
& & & &①如果一个类里面某个成员对象有nontrivial default constructor,编译器就会为我们的类产生nontrivial default constructor。
& & & &那么编译器这样做的理由是什么?
& & & &答案是因为类成员对象有nontrivial default constructor,那么编译器就需要显式的来调用这个类成员对象的nontrivial default constructor。而编译器想显式的调用类成员对象的nontrivial default constructor,就需要自己来合成一些代码来调用。但是记住,编译器合成的nontrivial default constructor仅仅调用类成员对象的默认构造函数,而不对我们类里面的其它变量做任何初始化操作。
& & & & 也就是说,如果你想初始化类成员变量以外的变量例如一个int、一个String,那么必须自己定义默认构造函数来完成这些变量的初始化。而编译器会对你定义的默认构造函数做相应的扩展,从而调用类成员对象的nontrivial default constructor。
& & & & ②如果一个派生类的基类有nontrivial default constructor,那么编译器会为派生类合成一个nontrivial default constructor。
& & & & 编译器这样的理由是:因为派生类被合成时需要显式调用基类的默认构造函数。
& & & & ③如何一个类里面隐式的含有任何virtual function table(或vtbl)、pointer member(或vptr)。
& & & & 编译器这样做的理由很简单:因为这些vtbl或vptr需要编译器隐式(implicit)的合成出来,那么编译器就把合成动作放到了默认构造函数里面。所以编译器必须自己产生一个默认构造函数来完成这些操作。
& & & & 所以如果你的类里带有任何virtual function,那么编译器会为你合成一个默认构造函数。
& & & & ④如果一个类虚继承于其它类。
& & & & 编译器这样做的理由和③类似:因为虚继承需要维护一个类似指针一样,可以动态的决定内存地址的东西(不同编译器对虚继承的实现不仅相同)。
& & & & 那么除了以上四种情况,编译器并不会为我们的类产生默认构造函数。
& & & & 所以编程中切忌想当然,要明白哪些事情是编译器做的,哪些事情需要程序员来完成的。就像堆所占用的资源需要程序员自己来释放,而栈空间是编译器管理的一样。
& & & & 只有如此,才能编写出质量更高的代码。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:34943次
排名:千里之外
原创:24篇
转载:28篇
(1)(1)(1)(3)(6)(25)(15)鍙?渶涓

我要回帖

更多关于 超好看的桌面背景 的文章

 

随机推荐