构造函数

C#深入类的方法

こ雲淡風輕ζ 提交于 2020-02-01 14:57:42
1:构造函数 1:构造函数具有一下特点: 方法名与类名相同 没有返回值类型 主要完成对象的初始化工作 2:问题:构造函数没有返回值类型,是不是可以定义为void? 解答:由于void修饰的方法表示返回值类型为空,并不代表没有返回值类型,所以不能将构造函数定义为void。 3:注意:我们在进行开发时,一般不在构造函数中进行类的实例化初始化以外的事情,不要尝试显式地调用构造函数。 4:无参构造函数 在默认情况下,系统会给类分配一个无参构造函数,并且没方法体,我们也可以自定义一个无参构造函数,在无参构造函数地方法体中对类的属性进行赋值。 语法: 访问修饰符 类名() { //方法体 } 5:带参数的构造函数 语法: 访问修饰符 类名(参数列表) { //方法体 } 注意: 参数列表一般用于给类的属性赋值,调用带参构造函数一定要使传入的参数和参数列表相对应。 6:隐式构造函数 1:在讲无参构造函数时我们讲过,当不给类编写构造函数时,系统将自动给类分配一个无参构造函数,称为隐式构造函数。C#有一个规定,一旦类有了构造函数,就不再自动分配构造函数。 2:问题:我们发现构造函数的访问修饰符都是public,是不是所有的构造函数的访问修饰符都是public呢? 解答:一般情况下构造函数的访问修饰符是public,不过C#也有私有构造函数,以后大家在接触到设计模式时,就会见到这种写法了。 2

C++中构造函数、虚函数、析构函数的执行顺序

折月煮酒 提交于 2020-02-01 12:40:02
#include <iostream> using namespace std; class A { public: // 第一步:执行类A的构造函数,输出"构造函数A" A() { cout << "构造函数A" << endl; } virtual void func() { cout << "构造A" << endl; } // 第七步:执行类A的析构函数,输出"析构函数A" ~A() { cout << "析构函数A" << endl; } virtual void fund() { cout << "清除A" << endl; } }; class B : public A { public: // 第二步:执行类B的构造函数,调用类A里虚函数,输出"构造A" B() { func(); } // 第四步:执行主函数里的c.fun(),输出"开始...",并调用func(); // 由于fun()不是构造函数和析构函数,且func()为虚函数 // 所以最终结果输出"开始...类C" void fun() { cout << "开始..."; func(); } // 第六步:执行类B的析构函数,调用fund()函数; // 由于是在析构函数里,且fund()为虚函数,所以执行类A里的fund(); // 输出清除A ~B() { fund(); } }; class C

Promise 的使用

有些话、适合烂在心里 提交于 2020-02-01 09:01:50
  Promise 的使用,用于异步处理 ,以及解决地狱回调的;   1. Promise 是一个构造函数,既然是构造函数,我们就可以 new Promise() 就可以得到一个 Promise 的实例   2. 在 Promise 上分别有两个函数,分别叫做 reslove(成功的回调函数)和 reject (失败之后的回调函数)   3. 在 Promise 的构造函数 prototype 的属性上,有一个 .then() 的方法,也就是说,只要是 Promise 的构造函数创建的实例,都可以访问 .then() 的方法   4. Promise 表示一个异步操作,每当我们 new Promise 的实例,就表示具体的异步操作   5. 既然 Promise 创建的实例是一个异步操作,那么这个异步操作只能由两种状态     5.1 状态一:异步执行成功了,需在内部调用成功的回调函数 reslove 把结果返回给调用者     5.2 状态二:异步执行失败了,需在内部调用失败的回调函数 reject 把结果返回给调用者     5.3 由于 Promise 实例,是一个异步操作,所以内部拿到操作结果后,无法使用 return 把操作结果返回给调用者,这时候只能使用 回调函数的形式,来把成功或失败的结果返回给调用者   6. 我们可以在 new 出来的 Promise 实例上,调用

编译器只有在三种情况下,才会提供默认的构造函数

◇◆丶佛笑我妖孽 提交于 2020-02-01 05:08:24
如果一个类中没有定义任何的构造函数,那么编译器只有在以下三种情况,才会提供默认的构造函数: 1、如果类有虚拟成员函数或者虚拟继承父类(即有虚拟基类)时 类有虚拟成员函数意味着这个类可能被继承,那么那个子类将要调用父类的构造函数,当用户没有主动定义构造函数时编译器应该提供默认的构造函数。类有虚拟继承父类,即声明其虚基类可以被共享,理由? 2、如果类的基类有构造函数(可以是用户定义的构造函数,或编译器提供的默认构造函数) 那该类肯定要生成一个构造函数去调用基类构造函数 3、在类中的所有非静态的数据成员,他们对应的类中有构造函数(可以是用户定义的构造函数,或编译器提供的默认构造函数) 非静态数据成员,那么本类的对象在构造时肯定要调用基类构造函数。即使是静态数据成员,编译时就得构造,也要调用本类的构造函数-》调用基类构造函数 虽然在一般情况下,构造函数不被显示调用,而是在创建对象时自动被调用。但是并不是不能被显示调用。有些时候是一定要显式调用的,只要是父类有带参的构造函数,在子类中就必须显式的调用父类的构造函数(因为不是默认构造函数,要传值的),因为子类的构造器在实例化时无法找到父类的构造函数(找到又如何?子类难道自主传参不成?)。当父类有自己写的无参构造函数时,子类也不用显式调用(子类总会找到该无参构造函数,并像默认构造函数一样去调用)。 来源: CSDN 作者: HayPinF 链接:

C++11 POD类型

邮差的信 提交于 2020-02-01 04:27:04
在C++中,声明自定义的类型之后,编译器会默认生成一些成员函数,这些函数被称为默认函数。其中包括 (1)构造函数 (2)拷贝构造函数 (3)拷贝赋值构造函数 (4)移动构造函数 (5)移动拷贝函数 (6)析构函数。 另外,编译器还会默认生成一些操作符函数,包括 (7)operator , (8)operator & (9)operator && (10)operator * (11)operator -> (12)operator ->* (13)operator new (14)operator delete 【1】显式缺省函数(=default) 但如果类的设计者又实现了这些函数的自定义版本后,编译器就不会去生成默认的版本。 有时候我们需要声明带参数的构造函数,此时就不会生成默认的构造函数,这样会导致类不再是POD类型(可参见随笔《 C++11 POD类型 》),从而影响类的优化: 1 #include <iostream> 2 using namespace std; 3 4 class Test 5 { 6 public: 7 Test(int i) : data(i) {} 8 9 private: 10 int data; 11 }; 12 13 int main() 14 { 15 std::cout << std::is_pod<Test>::value <<

第七周作业

一世执手 提交于 2020-01-31 23:38:58
20162325 2016-2017-2 《程序设计与数据结构》第7周学习总结 教材学习内容总结 多态定义与引用 掌握抽象类和接口使用 继承可适用于接口 通过接口实现多态 教材学习中的问题和解决过程 问题1:看了视频还不太懂“接口的定义与实现接口” 问题1解决方案: 百度 。 使用interface来定义一个接口。接口在定义后,就可以在类中实现该接口。在类中实现接口可以使用关键字implements,在类的继承中,只能做单重继承,而实现接口时,一次则可以实现多个接口 代码调试中的问题和解决过程 问题1:编译时总出现“找不到count符号”错误 问题1解决方案:课代表说并没有count这个变量,删除这行后即可编译通过 代码托管 ( ) 上周考试错题总结 错题1 下面哪条命令可以把 f1.txt 复制为 f2.txt ? A .cp f1.txt f2.txt B .copy f1.txt f2.txt C .cat f1.txt > f2.txt D .cp f1.txt | f2.txt E .copy f1.txt | f2.txt copy是Windows下的命令。cat f1.txt > f2.txt 通过输出重定向实现了复制。 错题2 如果有以下的程序代码: Int x=100; Int y=100; Integer wx=x; Integer wy=y; System

8.池化内存分配

我与影子孤独终老i 提交于 2020-01-31 19:56:11
netty内存管理思想 PooledByteBufAllocate PoolChunk Chunk初始化 PoolChunk分配内存 netty内存管理思想 java作为一门拥有GC机制的语言,长久以来它的使用者都不必手动管理内存,这比起c/c++是一个巨大的进步。但现在netty却反其道而行之,实现了一套不依赖GC而自行管理内存的机制。 那么netty为什么要这么做?众所周知netty是一个网络通信层框架,涉及到大量IO操作,对于此类操作,DirectByteBuffer无疑比起堆内存有更多性能上的优势。而与此同时,DirectByteBuffer也有自身的不足,那就是它的申请和释放成本更高。如果直接交给JVM管理,频繁的GC将使DirectByteBuffer的优势荡然无存。所以,对DirectByteBuffer进行池化管理,多次重用以减少申请、释放的想法就比较自然了。但是,不同于一般于我们常见的对象池、连接池等池化的案例,ByteBuffer有大小一说,且申请多大的内存进行管理也难以确定,如果大了会浪费,小了会导致频繁扩容和内存复制以及碎片化。因此netty需要在解决高效分配内存的同时又解决内存碎片化的问题,显然,它使用的算法就非常具有学习价值了。 由于内存管理有许多概念,有必要在前期做一些准备工作以帮助理解。 首先,考虑到netty是一个多线程环境

三、顺序容器

笑着哭i 提交于 2020-01-31 19:06:53
3.1 顺序容器 顺序容器理解 元素是由存储位置来排序的(关联容器是根据元素值来排序的)。 顺序容器种类 内存连续型:array/string/vector,特点:随机访问快,尾部插入快,中间插入慢。 内存不连续性型:list/forward_list,特点:无法随机访问,插入快。 中间类型:deque,特点,是vector和list的结合,随机访问和插入速度都较快。 顺序容器的限制 应该有默认构造函数:因为有resize等功能,需要调用默认构造函数。 vector必须有拷贝构造函数:因为动态分配空间时需要拷贝对象。 vector最好有移动构造函数:会增加拷贝时的效率。 注意 :容器应该放对象,尽量不要放指针,但是不放引用。 案例1: deque<int&> dq; //无法编译通过 for (int i; i <= 10; ++i) { dq.emplace_back(i); } for (auto i : dq) { cout << i << endl; } 解释:引用的使命周期一定要小于等于被引用的对象,但是放在容器中会出现被引用的对象已经无效,但他的引用还在。 案例2: deque<int*> dq; for (int i; i <= 10; ++i) { dq.emplace_back(&i); } for (auto i : dq) { cout << i <<

Entity Framework 4.1 之一 : 基础

只愿长相守 提交于 2020-01-31 12:47:55
原文名称:Entity Framework 4.1: Basics (1) 原文地址: http://vincentlauzon.wordpress.com/2011/04/03/entity-framework-4-1-basics-1/ 看到 Entity Framework 4.1 推荐英文教程 ,为了帮大家看起来方便一些,简单翻译一下。这是一个系列,共有 8 篇,这是第 1 篇。 Entity Framework 4.1 之一 : 基础 Entity Framework 4.1 之二 : 覆盖默认的约定 Entity Framework 4.1 之三 : 贪婪加载和延迟加载 Entity Framework 4.1 之四:复杂类型 Entity Framework 4.1 之五:多对多的关系 Entity Framework 4.1 之六:乐观并发 Entity Framework 4.1 之七:继承 Entity Framework 4.1 之八:绕过 EF 查询映射 从 Code First 的名字可以猜到,使用 Code-First,你需要从代码开始数据的工作,你可以直接通过代码生成相应的数据库,也可以使用已经存在的数据库。使用 Code First 的好处在于,你的实体类不需要任何 EF 的内容:不需要派生自某个特定的基类,也不需要任何讨厌的标签附加在其上。好了

##总结 JavaScript yq(1)

别来无恙 提交于 2020-01-31 12:40:52
JavaScript以前主要作为验证功能,它最主要的两个运用无外乎是 “定时器”和“轮播图”。 学习JavaScript的核心思想是: 1.获取元素的id 然后执行代码元素。 var odiv=document.getelementbyid(“div”); 2.通过你的想法去改变 HTML和CSS所有属性。 odiv.style.background=“red”; 关于script标签应该放在哪里? 可放在行间 但这样维护起来很麻烦。 < input type = "button" value = "按钮" onclick = "onload()" / > 2.可放在head body 标签之间。 如果你引入了外部的js文件。那么该script的你自己写代码将自动忽视。 < script type = "text/javascript" src = "javascript.js" > < / script > < script type = "text/javascript" > var obj = new object ( ) ; //定义一个构造函数 < / script > 数据的类型有哪几种? String 字符型 Number 数字型 Boolean 波尔值 NULL 空值 undefined 没定义型 object 对象 来源: CSDN 作者: 人间值得呀 链接: