构造函数

The Programming Language Idioms

好久不见. 提交于 2020-03-12 13:01:29
The Programming Language Idioms Click below to go directly to a specific section: 重载与重写 | 静态构造函数 | 只读代理 | 同步代理 | 资源管理 | 构造函数中的虚函数 强制针对接口编程 | 抗变与协变 | friend interface | ctor vs. setter | 杂项 重载与重写 问题 日常讨论中,术语的不统一带来些许混乱 惯用的表达 overload 重载 函数名称相同,参数不同(严格的定义还有其它一些限制) 静态决议 override 重写(覆写,覆盖,改写) 子类重新定义父类定义过的虚函数(个别语言允许返回值,访问级别可以不同) 动态决议 示例 class Base { } class Derived:Base { } class Client { void Test(Base obj){ Console.WriteLine("base"); } void Test(Derived obj){ Console.WriteLine("derived"); } static void Main( string [] args) { Base obj = new Derived(); new Client().Test(obj); //输出“base” } } 静态构造函数

第一篇博客 C+++知识点总结一

眉间皱痕 提交于 2020-03-12 11:58:32
1.成员 1.比较特殊的成员类型:protected. 保护成员在本类中和private类型的成员作用一模一样。区别在于保护成员可以由本类的派生类的成员函数访问,但是私有成员在其派生类中无法访问。 2.成员函数的定义 成员函数如果在类外定义,那么函数声明的参数表可以只写参数类型,但是在类外定义时必须给出参数名。 3.内联成员函数 (1)隐式定义内联成员函数 直接在类内定义的成员函数 (2)显式定义内联成员函数 用关键字inline声明(在声明和定义的语句句子开头加inline),此时可以在类内声明,类外定义。声明、定义都要在句首加inline. (3)内联函数 内联函数的代码会在编译时插入到每一个调用它的地方。这种做法会提高运行效率。但是只有很简短的代码才实用。 2.对象(成员访问,初始化方式) 1.对象成员的访问方式: 例如对对象d中成员year的访问 d.year (*p).year p->year 2.对象的初始化 (1) class complex { public: double real; //数据成员是public时才能使用这种方法 double imag; }; complex c={1.1,2.2}; (2)用构造函数(作用:为对象分配空间,进行初始化) 例如: ... class complex { public: complex(int a,int b)

何为安全发布,又何为安全初始化?

你。 提交于 2020-03-12 08:40:54
前言 很多时候我们需要跨线程共享对象,若存在并发我们必须以线程安全的方式共享对象,此时将涉及到我们如何安全初始化对象从而进行安全发布,本节我们将来讨论安全初始化、安全发布,文中若有错误之处,还望批评指正。 安全发布 按照正常叙述逻辑来讲,我们应该首先讨论如何安全初始化,然后再进行安全发布分析,在这里呢,我们采取倒叙的方式,先通过非安全发布的方式讨论所出现的问题,然后最后给出如何进行安全初始化,如下,我们以单例模式为例。 public class SynchronizedCLFactory { private Singleton instance; public Singleton get() { synchronized (this) { if (instance == null) { instance = new Singleton(); } return instance; } } } public class Singleton { } 如上提供了用于获取Singleton实例的公共方法,我们通过同步关键字保持线程安全,无论有多少个线程在请求一个Singleton,也不管当前状态如何,所有线程都将获得相同的Singleton实例,Singleton初始化在第一次请求Singleton时发生,而不是在初始化Singleton类时发生,至于是否惰性初始化并不是我们关注的重点

js的继承,call()方法的运用(1)

不打扰是莪最后的温柔 提交于 2020-03-12 08:08:36
在es6之前,是没有extends继承的,我们都是通过构造函数,原型对象来模拟,实现了继承. 为什么这么说呢? 这是因为我们是 利用构造函数来继承属性,利用原型对象来继承方法的 .现在我们就可以 通过call( ),apply( ),bind( )这三个方法也可以实现继承. call( ); 用法 fn . call ( thisArg , arg1 , arg2 , ... ) thisArg : 当前调用函数this的指向对象; arg : 传递的参数 call( )方法的作用 可以调用函数 function fn ( ) { console . log ( "123" ) ; } fn . call ( ) ; //123 这里我利用call方法也可以正常的调用函数 可以修改函数里面的this指向 首先我先看一下函数fn里面的this指向的是window function fn ( ) { console . log ( "123" ) ; console . log ( this ) ; //window{....} } var obj = { name : '小明' } fn . call ( ) ; //123 fn . call ( obj ) //{name: "小明"} 这时 f n 这个函数里面的this就指向了obj这个对象 call(

2020.03.10

我只是一个虾纸丫 提交于 2020-03-12 02:23:34
2020/3/10 在做携程网flex布局的时候 flex:1;没有效果 此事未解决,暂时搁置 重新复习javascript 视频进度每天100;今天:看到前150 笔记如下: javascript输入输出语句 alert(msg) 浏览器弹出警示框 console.log(msg) 是后台程序员看的 prompt(info) 浏览器弹出输入框,用户可输入 它取过来的值是字符型的 变量是内存中申请的用来存放数据的空间 变量声明 var age;//声明一个名为age的变量 八进制 数字前面加0表示8进制 十六进制 数字前面加0x表示十六进制 数字型范围 console.log(Number.MAX_VALUE); console.log(Number.MIN_VALUE); 数字型三个特殊值alert(Infinity); //无穷大 alert(-Infinity); //无穷小 alert(NaN);//代表一个非数值 string 字符串类型 ‘pink’ 转义字符:\n 换行符 \ 斜杠 ’ 单引号 * 双引号 \t tab缩进 \b 空格 显示字符串长度 字符串名.length 字符串拼接 console.log(‘沙漠’+‘骆驼’); //沙漠骆驼 布尔型:只有两个值true/false 检测变量类型:typeof 变量名 转换为字符串 变量.toString()

简单粗暴地理解js原型链--js面向对象编程

∥☆過路亽.° 提交于 2020-03-11 21:51:00
简单粗暴地理解js原型链--js面向对象编程 原型链理解起来有点绕了,网上资料也是很多,每次晚上睡不着的时候总喜欢在网上找点原型链和闭包的文章看,效果极好。 不要纠结于那一堆术语了,那除了让你脑筋拧成麻花,真的不能帮你什么。简单粗暴点看原型链吧,想点与代码无关的事,比如人、妖以及人妖。 1)人是人他妈生的,妖是妖他妈生的。人和妖都是对象实例,而人他妈和妖他妈就是原型。原型也是对象,叫原型对象。 2)人他妈和人他爸啪啪啪能生出一堆人宝宝、妖他妈和妖他爸啪啪啪能生出一堆妖宝宝,啪啪啪就是构造函数,俗称造人。 3)人他妈会记录啪啪啪的信息,所以可以通过人他妈找到啪啪啪的信息,也就是说能通过原型对象找到构造函数。 4)人他妈可以生很多宝宝,但这些宝宝只有一个妈妈,这就是原型的唯一性。 5)人他妈也是由人他妈他妈生的,通过人他妈找到人他妈他妈,再通过人他妈他妈找到人他妈他妈……,这个关系叫做原型链。 6)原型链并不是无限的,当你通过人他妈一直往上找,最后发现你会发现人他妈他妈他妈……的他妈都不是人,也就是原型链最终指向null。 7)人他妈生的人会有人的样子,妖他妈生的妖会有妖的丑陋,这叫继承。 8)你继承了你妈的肤色,你妈继承了你妈他妈的肤色,你妈他妈……,这就是原型链的继承。 9)你谈对象了,她妈让你带上房产证去提货,你若没有,那她妈会问你妈有没有,你妈没有那她妈会问你妈她妈有没有…

java 构造函数

假如想象 提交于 2020-03-11 20:04:42
对象一建立就会调用与之对应的构造函数。 构造函数可以给对象初始化。 当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数,当在类中自定义了构造函数之后,默认的构造函数就没有了。 来源: https://www.cnblogs.com/hongxiao2020/p/12464510.html

java 构造代码块

时间秒杀一切 提交于 2020-03-11 20:03:03
作用:给对象进行初始化。 对象一建立就运行,而且优先于构造函数执行。 与构造函数区别:   构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化。 构造代码块中定义的是不同对象共性的初始化内容。 来源: https://www.cnblogs.com/hongxiao2020/p/12464555.html

第七章总结

僤鯓⒐⒋嵵緔 提交于 2020-03-11 17:58:29
第七章总结:类的继承和派生 1. 继承:保持已有类的特性而构造新类的过程(实现代码重用) 派生:在已有类的基础上新增自己的特性而产生新类的过程(新的问题出现, 原有程序无法解决(或不能完全解决)时,需要对原有程序进行改造) 继承机制的作用是() A. 信息隐藏 B. 数据封装 C. 定义新类 D. 数据抽象 答案:C 2. 基类 派生类 公有继承: 公有 公有 保护 保护 私有继承: 公有、保护 私有 保护继承: 公有、保护 保护 (在所有继承中,私有成员都是不可以访问的!) (构造函数和析构函数不能被继承) 3.派生类构造函数的语法形式(可以对基类对象进行初始化): Derived::Derived(int i0,int j0):Base(i0),j(j0){ } (1)调用基类构造函数,调用顺序按照它们被继承时声明的顺序(从左向右)。 class Derived:public Base2,public Base1{ }; 先Base2 后Base1 (2)对成员对象进行初始化,初始化顺序按照它们在类中声明的顺序。 (3)执行派生类的构造函数体中的内容。 4.单继承:派生类只从一个基类派生。 多继承:派生类从多个基类派生。 多重派生:由一个基类派生出多个不同的派生类。 多层派生:派生类又作为基类,继续派生新的类。 5.析构函数:系统会自动调用,但顺序和构造函数相反 6.class