构造函数

C++单例模式

有些话、适合烂在心里 提交于 2020-04-06 02:37:05
单例模式是任何面向对象语言绕不过的,单例模式是很有必要的,接下来我用最朴素的语言来解释和记录单例模式的学习。 什么是单例模式? 单例模式就是一个类只能被实例化一次 ,更准确的说是 只能有一个实例化的对象的类。 创建一个单例模式的类(初想) 一个类只能有一个实例化的对象,那么这个类就要禁止别人new出来,或者通过直接定义一个对象出来 class CAR { public: CAR(){} ~CAR(){} }; CAR a; CAR *b = new CAR; 很明显这样的类可以被程序员用上面这两种方式实例化。那么考虑,如何禁止用上面的这两种方式实例化一个类呢? 如果把构造函数私有化,很明显上面这两种方法都会默认的去调用构造函数,当构造函数是private或者protected时,构造函数将无法从外部调用。 class CSingleton { private: CSingleton() { } }; int main() { CSingleton t; CSingleton *tt = new CSingleton; } 上面的代码选择了这样实例化类,很明显编译器会报错,因为私有化的构造函数无法被外部调用 error: ‘CSingleton::CSingleton()’ is private 既然构造函数是私有了,那么他就只能被类内部的成员函数调用

设计模式之UML类图的常见关系

a 夏天 提交于 2020-04-04 17:23:53
设计模式之 UML 类图的常见关系 本文来自转载 烧点饭博客 本篇会讲解在 UML 类图中,常见几种关系 : 泛化( Generalization ),依赖 (Dependency) ,关联( Association) ,聚合( Aggregation ),组合 (Composition) 。 1. 泛化关系 泛化关系是继承或实现的关系,是 is a 关系,具体表现为类与类的继承,接口与接口的继承,类对接口的实现关系。 2. 依赖关系 依赖关系表示为一个类使用另一个类,这种使用关系是具有偶然性的、临时性的、非常弱的,一个类的变化会影响到另一个类,是 use a 关系,如果类 A 依赖于类 B, 那么类 B 可以是类 A 的局部变量,或类 A 方法的参数,或静态方法的调用。 3. 关联关系 关联关系是一种强依赖关系,这种关系不存在依赖关系的偶然性,关系也不是临时的,是长期的,稳定的。双方的关系是平等的,可以单向关联也可以是双向关联。假如类 A 关联了类 B, 则类 B 是类 A 的全局变量(注意是全局变量,再看看上面的依赖关系),大多数关联都是单向关联,这比较容易维护,关于关联,在生活中我们常会说,类 A 持有类 B 的引用。 4. 聚合关系 聚合关系是特殊的关联关系,是一种强的关联关系,他体现的是整体与部分关系,即 has-a 的关系,但是整体和部分是可以分离的,注意,是可以分离的

组合方式实现继承:构造函数、原型链

喜欢而已 提交于 2020-04-04 15:01:06
/* 组合方式实现继承:构造函数、原型链 */ function Parent3() { this.name = 'Parent 的属性'; this.arr = [1, 2, 3]; } function Child3() { Parent3.call(this); //【重要1】执行 parent方法 this.type = 'Child 的属性'; } Child3.prototype = new Parent3(); //【重要2】第二次执行parent方法 var child = new Child3(); 来源: https://www.cnblogs.com/weichenji0/p/12631633.html

直接初始化与复制初始化

淺唱寂寞╮ 提交于 2020-04-04 07:48:36
这是C++中所支持的两种初始化方式。 复制初始化使用=符号,而直接初始化将初始化式放在圆括号中。 (1)对于一般的内建类型,这两种初始化基本上没有区别。 int a(5);//直接初始化 int a=5;//复制初始化 int a=int (5);//直接初始化 (2)当用于类类型对象时,初始化的复制形式和直接形式有所不同:直接初始化直接调用与实参匹配的构造函数,复制初始化总是调用复制构造函数。复制初始化首先使用指定构造函数创建一个临时对象,然后使用复制构造函数将那个临时对象复制到正在创建的对象。 string null_book = "9-999-99999-9 ";//copy-initialization string dots(10, '. ');//direct-initialization string empty_copy = string();//先direct,然后copy-initialization string empty_direct;//direct-initialization 对于类类型对象,只有指定单个实参或显式创建一个临时对象用于复制时,才使用复制初始化。 创建dots时,调用参数为一个数量和一个字符的string构造函数并直接初始化dots的成员。创建null_book时,编译器首先调用接受一个C风格字符串形参的string构造函数

静态代码块、构造代码块、构造函数、普通代码块

故事扮演 提交于 2020-04-04 06:50:42
1、静态代码块 (1)格式 在java类中(方法中不能存在静态代码块)使用static关键字和{}声明的代码块: public class CodeBlock { static{ System.out.println("静态代码块"); } } (2)执行时机 静态代码块在类被加载的时候就运行了,而且只运行一次,并且优先于各种代码块以及构造函数。如果一个类中有多个静态代码块,会按照书写顺序依次执行。后面在比较的时候会通过具体实例来证明。 (3)静态代码块的作用 一般情况下,如果有些代码需要在项目启动的时候就执行,这时候就需要静态代码块。比如一个项目启动需要加载的很多配置文件等资源,我们就可以都放入静态代码块中。 (4)静态代码块不能存在任何方法体中 这个应该很好理解,首先我们要明确静态代码块是在类加载的时候就要运行了。我们分情况讨论:   对于普通方法,由于普通方法是通过加载类,然后new出实例化对象,通过对象才能运行这个方法,而静态代码块只需要加载类之后就能运行了。   对于静态方法,在类加载的时候,静态方法也已经加载了,但是我们必须要通过类名或者对象名才能访问,也就是说相比于静态代码块,静态代码块是主动运行的,而静态方法是被动运行的。   不管是哪种方法,我们需要明确静态代码块的存在在类加载的时候就自动运行了,而放在不管是普通方法还是静态方法中,都是不能自动运行的。 (5

JAVA注释规范

不打扰是莪最后的温柔 提交于 2020-04-02 20:01:29
在软件开发的过程中总是强调注释的规范,但是没有一个具体的标准进行说明,通常都是在代码编写规范中简单的描述几句,不能作为一个代码注释检查的标准和依据,做什么都要有一个依据吗:),现在我特整理了一个《Java的注释规范》,内容来自网络、书籍和自己的实际积累。 JAVA注释规范 版本/状态 作者 版本日期 1.0 ghc 2008-07-02 一、背景 1、当我们第一次接触某段代码,但又被要求在极短的时间内有效地分析这段代码,我们需要什么样的注释信息? 2、怎么样避免我们的注释冗长而且凌乱不堪呢? 3、在多人协同开发、维护的今天,我们需要怎么样的注释来保证高质、高交的进行开发和维护工作呢? 二、意义 程序中的注释是程序设计者与程序阅读者之间通信的重要手段。应用注释规范对于软件本身和软件开发人员而言尤为重要。并且在流行的敏捷开发思想中已经提出了将注释转为代码的概念。好的注释规范可以尽可能的减少一个软件的维护成本 , 并且几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护。好的注释规范可以改善软件的可读性,可以让开发人员尽快而彻底地理解新的代码。好的注释规范可以最大限度的提高团队开发的合作效率。长期的规范性编码还可以让开发人员养成良好的编码习惯,甚至锻炼出更加严谨的思维能力。 三、注释的原则 1、 注释形式统一 在整个应用程序中,使用具有一致的标点和结构的样式来构造注释

javascript-对象

夙愿已清 提交于 2020-04-02 08:16:19
6.1理解对象 创建方式:函数生成 和 字面量 例如: var a = new Object(); // new 构造函数方式 var a = Object(); // 调用函数 var a = {}; // 字面量 属性类型 (1)数据属性:[[configurable]](能否修改属性), [[enumerable]](能否通过for in 循环获取),[[writable]](能否修改),[[value]], 通过Object.defineProperty(obj, proper, properObj)方法修改默认属性 例如: var a = { name: 'jiang' }; console.log(Object.getOwnPropertyDescriptor(a, 'name')); // {value: "jiang", writable: true, enumerable: true, configurable: true} Object.defineProperty(a, 'name', { 'writable': false}); a.name = 'zhong'; console.log(Object.getOwnPropertyDescriptor(a, 'name')); // {value: "jiang", writable: false,

JAVA创建对象的五种方式

不想你离开。 提交于 2020-04-01 07:56:58
最近在学习JAVA知识,通过网上翻看资料,发现原先有的理解不深的东西,渐渐明白了些。对象的使用,在编写软件过程中是必不可少的,不知道大家有没和我一样,几乎都是使用new来创建。那么,问题来了,JAVA有几种创建对象 的方式呢? 使用new关键字创建。 使用Class的newInstance()方法, 位于java.lang包,比如Person类,创建对象可以使用, 但是下面的两种方式不能调用private构造函数,且构造对象的类中必须包含无参构造函数(构造器需可见 visible) ,否则会报错,对于捕获或者未捕获的异常均由构造器抛出;。 public class person { /** * */ private static final long serialVersionUID = 10L; String name = "Jack"; public person(){ this.name = name + " ma"; System.out.println("construct Person"); } private person(int a,int b) { System.out.println("a:"+a+ " b:" + b); } @Override public String toString() { return name; } } 方法一 /

使用对象初始值设定项初始化

可紊 提交于 2020-04-01 02:30:22
记录 使用对象初始值设定项初始化 对象。 using System; using System.Collections.Generic; namespace ConsoleApp2 { class Program { static void Main(string[] args) { // 使用构造函数初始化对象 StudentName student1 = new StudentName("Craig", "Playstead"); // 以声明方式初始化类型对象,调用默认构造函数,默认构造函数必须为public StudentName student3 = new StudentName { ID = 183 }; // 以声明方式初始化类型对象,调用默认构造函数,默认构造函数必须为public StudentName student4 = new StudentName { FirstName = "Craig", LastName = "Playstead", ID = 116 }; // 对象初始值设定项可用于在对象中设置索引器 var team = new BaseballTeam { [4] = "Jose Altuve", ["RF"] = "Mookie Betts", ["CF"] = "Mike Trout" }; Console.WriteLine(team

java 面向对象——进度1

孤人 提交于 2020-03-31 06:46:50
面向对象: 1,面向对象和面向过程思想。 面向对象强调的是对象实例。 面向过程强调的是动作。 对象将动作进行封装。 在问题领域中,我们先去找的都是涉及的对象, 然后分析对象的属性和行为。 2,面向对象的特点。 1,是一种常见思想。 2,复杂变简单。 3,执行者变指挥者。 举例:面试的例子。 3,类与对象的关系。 类:就是对事物的描述,其实类就是将对象共性的内容进行抽取。 对象:就是该类事物实实在在存在个体,在java中通过new来完成创建的, 堆内存的对象主要用于封装对象中的特有数据。 4,类中的成员: 成员变量:事物的属性, 成员函数:事物的行为。 成员变量和局部变量的区别? 答: 如何使用成员,只要建立该类对象,并通过 "对象.对象成员" 就可以完成调用 5,封装。 隐藏实现细节,并对外提供公共的访问方式。 函数或者类都是一个封装体。 特点: 1,隔离的变量。 2,便于使用。 3,提高复用。 4,提高安全性。 举例:机箱的例子 体现之一:私有。 私有在源代码中的使用就是在本类中有效。 通常会将成员变量xxx私有化,并对外提供对应的setXxx getXxx方法对其进行访问。 其实目的就是成员变量访问进行控制。 让成员的访问具备可控性,提高了程序的健壮性。 私有仅仅是封装的体现形式之一而已。 自定义一个Person类。动手。 6,构造函数。 写法特点: 1,函数名和类名相同。 2