构造函数

移动构造函数和移动赋值与拷贝构造函数和赋值构造函数的比较

旧时模样 提交于 2020-02-07 20:37:51
首先看拷贝构造函数: //拷贝构造函数 A(A& t) { if(t.text!=NULL) { int len=strlen(t.text); text=new char[len+1]; strcpy(text,t.text); } } 拷贝构造函数中实现了深拷贝处理。再看移动构造函数: //移动构造函数 A(A&& t) { if(t.text!=NULL) { text=t.text; t.text=NULL; } }  代码构造和拷贝构造函数类似,但是内存的处理不是拷贝而是转移。注意参数类型是右值引用。 移动赋值运算符 赋值运算符的情况和构造函数类似,还是先考察普通的赋值运算符: //拷贝赋值运算符 A& operator=(const A& rhs) { if(this!=&rhs) { free(); if(rhs.text!=NULL) { int len=strlen(rhs.text); text=new char[len+1]; strcpy(text,rhs.text); } } return *this; } 再看移动赋值运算符: //移动赋值运算符 A& operator=(A&& rhs)noexcept { if(this!=&rhs) { free(); text=rhs.text; rhs.text=NULL; } reeturn *this; }

2.EF Core添加数据库配置的几种方式

Deadly 提交于 2020-02-07 20:04:25
一、OnConfiguring:重写OnConfiguring方法添加配置信息 public class BloggingContext: DbContext { /// <summary> /// 配置数据连接信息 /// </summary> /// <param name="optionsBuilder"></param> protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseMySql("数据库连接字符串"); base.OnConfiguring(optionsBuilder); } } 二、构造函数参数方式配置   a.生成DbContextOptions   b.传入构造函数参数 var optionsBuilder = new DbContextOptionsBuilder<BloggingContext>(); optionsBuilder.UseMySql("数据库连接字符串"); using (BloggingContext db=new BloggingContext(optionsBuilder.Options)) {   return db.Blogs; } 三、容器添加方式 1、添加操作数据库上下文的构造函数

ES6之class

我们两清 提交于 2020-02-07 18:47:35
传统的JavaScript中只有对象,没有类的概念。它是基于原型的面向对象语言。原型对象特点就是将自身的属性共享给新对象。这样的写法相对于其它传统面向对象语言来讲,很有一种独树一帜的“感脚”!非常容易让人困惑! 首先大家要明白,为什么要出现 class? 首先回顾我们的JavaScript编程思想的发展史。 从JS诞生之时,刚开始做的就是面向过程的编程,把一个问题给解释清楚了, 几行JS就可以搞定。随着JS的发展以及浏览器对于JS执行速度越来越高。我们对于JS实现的功能越来越多,伴随代码量也会越来越多,我们仍然使用面向过程式的编程方案,就会有问题。 我们制作打怪兽游戏: *** function attack() 逃跑 function escape() 加血 function resume() 会关注这三个方法的具体实现,并且反复调用这些方法完成游戏。这是面向过程的思路。 当我们增加打怪兽的使用者时,单纯这几个方法不足以完成多人游戏。 我们需要更高级的思想面向对象,尽管JavaScript不具备面向对象的特征(继承, 封装,多态)。但是我们可以采用类似的这种思想的方式去改写这样的需求: 基于我们原来过程的基础之上,我们封装这样的构造函数,用于产生可以多次执行这样过程的对象。这样的话我们的打怪兽,不单纯如何打怪兽(面向过程),而是变成了谁能打怪兽(类似面向对象的思想)

构造函数的继承

心不动则不痛 提交于 2020-02-07 12:27:22
构造函数的继承 继承:通过“某一种方式”让一个对象,可以访问并使用到另一个对象中的内容。 这种行为我们叫做 继承! 继承的作用: 节省了各个构造函数中,大量重复声明的属性和方法。 提高了开发效率,并节省了内存 继承的方式一: call和apply方法的使用 ,达成了构造函数继承的作用 构造函数的继承: 优点 简约易使用 缺点 只可以继承(借用) 构造函数中的内容 无法继承(借用) 原型中的内容 function fn ( ) { console . log ( this ) ; } function Animal ( name , sex ) { this . name = name ; this . sex = sex ; this . jiao = function ( ) { console . log ( this ) ; } } 直接给原型赋值一个对象,可以简化批量赋值。 但,等于重构了原型 重构原型时,需要手动创建constructor: 构造函数。 否则原型的指向链条会断 Animal . prototype = { constructor : Animal , ll : "lala" , fun : function ( ) { console . log ( "我是原型中方法" ) ; } } ; let obj = new Animal ( "猴子" , "公"

HBase基本数据操作详解

这一生的挚爱 提交于 2020-02-07 09:00:48
文章目录 概述 使用 命名空间Namespace 命名空间管理 预定义的命名空间 创建表 删除表 修改表 新增、更新数据Put 常用构造函数 常用方法 实例代码 删除数据Delete 构造函数 常用方法 实例代码 获取单行Get 构造函数 常用方法 实测代码 获取多行Scan 常用构造函数 常用方法 实测代码 概述 对于建表,和RDBMS类似,HBase也有namespace的概念,可以指定表空间创建表,也可以直接创建表,进入default表空间。 对于数据操作,HBase支持四类主要的数据操作,分别是: Put :增加一行,修改一行; Delete :删除一行,删除指定列族,删除指定column的多个版本,删除指定column的制定版本等; Get :获取指定行的所有信息,获取指定行和指定列族的所有colunm,获取指定column,获取指定column的几个版本, 获取指定column的指定版本等; Scan :获取所有行,获取指定行键范围的行,获取从某行开始的几行,获取满足过滤条件的行等。 这四个类都是 org.apache.hadoop.hbase.client的子类,可以到官网API去查看详细信息,本文仅总结常用方法,力争让读者用20%的时间掌握80%的常用功能。 使用 命名空间Namespace 在关系数据库系统中,命名空间namespace指的是一个 表的逻辑分组

04面向对象基础

醉酒当歌 提交于 2020-02-07 06:52:48
总结一下这两天的学习笔记,正所谓温故而知新嘛,希望能够更好的学习后面的新知识 1、面向对象概念 面向对象三大特征:封装、继承、多态 2、类对象是引用传递 把一个对象传递到方法中,传递的也是这个对象本身的引用,修改这个对象会影响外面的对象 3、null 表示变量没有指向任何对象 值类型(ValueType):数值类型(int、long、double等)、boolean等基本类型,枚举、结构体的值是复制传递,不能为null; String不是值类型 4、局部变量和成员变量 (1)局部变量必须初始化,成员变量声明时已经默认初始化了(基本数值类型初始化值为0;布尔类型默认初始化值为false;string类型初始化值为null) (2)当成员变量和局部变量(函数参数也可以看做局部变量)重名的时候,成员变量被看做局部变量,为避免混乱,访问成员变量时加上"this.","this"表示当前对象; 5、public和private class test { public int age;//被public修饰,这个成员变量可以被外部和这个类自己访问 private string name;//被private修饰,这个成员变量只能被这个类内部访问 //可以声明一个setName方法来提供给外界 外部通过这个方法操作给内部的私有变量name赋值 public void setName(int

理解js中的原型和原型链

时光总嘲笑我的痴心妄想 提交于 2020-02-07 02:49:00
不记下来总是容易忘记掉,相当于备忘吧。。本文主要参考高程3,以及一点自己的想法,如有不对,还望指正 为什么要使用原型模式? 我们创建对象最一开始用的工厂模式: function createPeople(name, age, job) { var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function () { alert(this.name); } } var person1 = createPeople('Nicolas', 29, 'SoftWare Engineer'); var person1 = createPeople('Greg', 27, 'Doctor'); 该模式的缺点在于: 无法获知一个对象的类型 为了解决该问题,就有了构造函数模式: function Person(name, age, job) { this.name = name; this.age = age; this.job= job; this.sayName = function() { alert(this.name); }; } var people1 = new Person('Nicholas', 29, 'Software Engineer'); var people2 = new

java 笔记

房东的猫 提交于 2020-02-07 02:21:19
后台开发的过程中积累的关于java的杂记 架构 SSH框架 为什么要分层? 因为分层使代码变得清晰,容易写也容易阅读,更重要的是让代码扩展性更好,层与层之间的改动不会互相影响 各层的分工 dao——与数据库交互 service——处理业务逻辑,调用dao层方法 action——用来控制转发,接到请求交给service处理 dao是用于操作数据用的,service是为页面功能服务的,在service中对数据进行处理计算,然后返回数据结果到ACTION,而action则再对数据进一步处理,比如把list转成json,把两个service数据进行合并等,并发送到jsp页面显示。 并发相关 ReentrantLock 参考 Java多线程11:ReentrantLock的使用和Condition lock之后要自己unlock lock相比synchronized更加灵活,可以通过trylock判断锁是不是被占用了,在被占用的情况下可以忙其他事,而不是直接就阻塞了 lock持有的是对象监视器,也就是类似于syncronized(this){} ,但是需要注意这两者持有的对象监视器是不同的 lock配置Condition的signal和await可以实现syncronized的wait和notify来实现等待/通知模型,相比之下Condition更灵活

C++多态

帅比萌擦擦* 提交于 2020-02-07 02:15:42
多态用一句话来总述就是:父类的指针或者引用指向基类的对象 多态分为两种: 编译时多态(静态多态):函数重载,运算符重载 运行时多态(动态多态):派生类,虚函数 静态多态:函数地址早绑定 动态多态:函数地址晚绑定 子类在构造前必须先构造父类,再构造子类,析构顺序相反 non-virtual函数:你不希望子类重写这个函数(override) virtual函数:你希望子类重写这个函数,且你已经有了默认定义 pure-virtual函数:你希望子类一定要重写这个函数,且你对它没有默认定义 ①构造函数可以设置为虚函数吗? 1.从存储空间角度。 虚函数对应一个vtable,这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。 2,从使用角度 构造函数本身就是要初始化实例,那使用虚函数也没有实际意义呀。所以构造函数没有必要是虚函数。虚函数的作用在于通过父类的指针或者引用来调用它的时候能够变成调用子类的那个成员函数。而构造函数是在创建对象时自动调用的,不可能通过父类的指针或者引用去调用,因此也就规定构造函数不能是虚函数。 3、从实现上看,vbtl在构造函数调用后才建立,因而构造函数不可能成为虚函数 ②虚析构函数 如果子类的成员变量有堆区开辟的空间

c++ -- 多态(类)

↘锁芯ラ 提交于 2020-02-07 02:12:58
假期 2020.02 .06 学习资源来源于中国MOOC以及c语言中文网 前言 c++之所以是面向对象的是因为该语言既支持类也支持多态,而多态是什么呢? 定义 多态就是同一个操作作用于不同的对象会产生不同的结果。这个操作一般指的是函数的调用等等。 标准定义 是对于通过基类指针调用基类和派生类中都有的同名、同参数表的虚函数的语句,编译时并不确定要执行的是基类还是派生类的虚函数;而当程序运行到该语句时,如果基类指针指向的是一个基类对象,则基类的虚函数被调用,如果基类指针指向的是一个派生类对象,则派生类的虚函数被调用。这种机制就叫作“多态(polymorphism)”。 虚函数 :在成员函数前加 virtual 即可生成虚函数。注意虚函数只能在类的内部定义成员函数时使用,不能在类外部写成员函数时使用,构造函数与静态成员都不能是虚函数。 多态类 :包含虚函数的类称为“多态类”。 如何构成多态 常判断条件是 有继承关系 继承关系中有同名的虚函数,并且是覆盖关系 存在基类的指针,指向派生类的虚函数,或者引用 那么什么时候声明虚函数呢? 成员函数所在的类是否是基类 成员函数在继承后是否会被新定义或者更改,是的话,需要;否则,不需要。 多态应用 举一个指针类型的例子: 注意:多态的语句调用哪个类的成员函数是在运行时才能确定的,编译时不能确定。多态的函数调用语句被称为是“动态联编”