构造函数

c++中冒号(:)和双冒号(::)的用法

我的未来我决定 提交于 2020-01-26 17:32:54
c++中冒号(:)和双冒号(::)的用法 1.冒号(:)用法 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 (1)表示机构内位域的定义(即该变量占几个bit空间) typedef struct _XXX{ unsigned char a:4; unsigned char c; } ; XXX (2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。 struct _XXX{ _XXX() : y(0xc0) {} }; (3) public:和private:后面的冒号,表示后面定义的所有成员都是公有或私有的,直到下一个"public:”或"private:”出现为止。"private:"为默认处理。 (4)类名冒号后面的是用来定义类的继承。 class 派生类名 : 继承方式 基类名 { 派生类的成员 }; 继承方式:public、private和protected,默认处理是public。 2.双冒号(::)用法 (1)表示“域操作符” 例:声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时, 就要写成void A::f(),表示这个f(

6.5 类与对象 【C++】 ----继承

陌路散爱 提交于 2020-01-26 14:00:52
新建一个类Employee ——》 基类:输入Person 引言:①一个类Employee它首先是个人(即基于类Person); ②main.cpp只需要包含头文件"Employ.h" ,不需要包含 “Person.h” (因为在Employ.h已经引用了Person.h) 完善信息: 【这里懒得到Employee.cpp里定义函数,直接在.h里定义函数了】 下面这个: Employee的大小为 : Emplyee属性之和 + Person属性之和 【注意:子类不能访问符类的私有属性,如: 如果 iWeight是私有的,那么 employee e;后, e.iWeight; 语句是错误的】 修改一下Person的构造函数 Employee e; Employee的构造函数会先调用Person的构造函数执行 即声明一个子类Employee对象时,会 先 调用父类Person的构造函数, 后 再去调用自己本身的构造函数 总结:(如图) 【注意: 上图 中的 :Person() 当父对象的构造函数没有参数时,可以不写这语句; 但是如果有参数时,就必须写,并且得加参数 (下图有解析) 】 修改: 加参数 再修改: 传 “ 引用 ”更快 , 并且说明不改它(const) 但我们实际是以下图的操作实现的: 可以再优化:(Employee的构造函数) 继承链 D的父类是C, C的父类是B,

Javascript学习之函数(function)

自作多情 提交于 2020-01-26 12:13:03
在JS中,Function(函数)类型实际上是对象;每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也是一个指向函数对象的指针。 一 函数的声明方式 //1.函数声明方式 function add(num1,num2){ return num1+num2; } //2.函数表达式定义函数 var add= function(num1,num2){   // 通过变量box即可引用函数; return num1+num2; };             // 注意函数末尾有一个分号,就像声明其他变量时一样;  var another = add;         // 使用不带圆括号的函数名是访问函数指针;而非调用函数;  console.log(another(10,10));   //3.使用Function构造函数 var add = new Function('num1','num2','return num1+num2'); // 第三种方式不推荐,这种语法会导致解析两次代码(第一次解析常规JS代码,第二次解析传入构造函数中的字符串),从而影响性能; // 可以通过这种语法来理解"函数是对象,函数名是指针"的概念; 通常来说,在全局作用域内声明一个对象,只不过是对一个属性赋值而已,比如上例中的add函数

转载 TypeScript装饰器(decorators) experimentalDecorators emitDecoratorMetadata tsconfig.json

与世无争的帅哥 提交于 2020-01-26 09:54:34
TypeScript装饰器(decorators) - 一箭中的 - 博客园 https://www.cnblogs.com/winfred/p/8216650.html TypeScript装饰器(decorators) 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上,可以修改类的行为。 装饰器使用 @expression这种形式,expression求值后必须为一个函数,它会在运行时被调用,被装饰的声明信息做为参数传入。 例: @Path('/hello') class HelloService {} 在 TypeScript 中装饰器还属于实验性语法,所以要想使用必须在配置文件中 tsconfig.json 编译选项中开启: { "compilerOptions": { "experimentalDecorators": true } } 如何定义装饰器 装饰器本身其实就是一个函数,理论上忽略参数的话,任何函数都可以当做装饰器使用。例: demo.ts function Path(target:any) { console.log("I am decorator.") } @Path class HelloService {} 使用 tsc 编译后,执行命令 node demo.js ,输出结果如下: I am decorator.

Queue模块详解

浪子不回头ぞ 提交于 2020-01-26 09:50:52
Python3.5中,队列是线程间最常用的交换数据的形式。Queue模块是提供队列操作的模块,虽然简单易用,但是不小心的话,还是会出现一些意外。 创建一个“队列”对象 import queue q = queue.queue(maxsize = 10) queue.queue类即是一个队列的同步实现。队列长度可为无限或者有限。可通过queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。 将一个值放入队列中 q.put(10) 调用队列对象的put()方法在队尾插入一个项目。put()有两个参数,第一个item为必需的,为插入项目的值;第二个block为可选参数,默认为 1。如果队列当前为空且block为1,put()方法就使调用线程暂停,直到空出一个数据单元。如果block为0,put方法将引发Full异常。 将一个值从队列中取出 q.get() 调用队列对象的get()方法从队头删除并返回一个项目。可选参数为block,默认为True。如果队列为空且block为True,get()就使调用线程暂停,直至有项目可用。如果队列为空且block为False,队列将引发Empty异常。 Python queue模块有三种队列及构造函数: 1、Python queue模块的FIFO队列先进先出。 class queue.queue

Python 构造函数、 Python 析构函数、Python 垃圾回收机制

萝らか妹 提交于 2020-01-26 08:09:40
构造函数与析构函数 构造函数: 用于初始化类的内容部状态,Python提供的构造函数式 __init__(); 也就是当该类被实例化的时候就会执行该函数。那么我们就可以把要先初始化的属性放到这个函数里面。如下程序: __init__()方法是可选的,如果不提供,Python 会给出默认的__init__方法 一般数据的获取需要定义的get和set方法 析构函数: 上图中的“__del__”就是一个析构函数了,当使用del 删除对象时,会调用他本身的析构函数,另外当对象在某个作用域中调用完毕,在跳出其作用域的同时析构函数也会被调用一次,这样可以用来释放内存空间。 __del__()也是可选的,如果不提供,则Python 会在后台提供默认析构函数 如果要显式的调用析构函数,可以使用del关键字,方式如下: del对象名 垃圾回收机制 Python 采用垃圾回收机制来清理不再使用的对象;Python 提供gc模块释放 不再使用的对象,Python 采用‘引用计数’ 的算法方式来处理回收, 即:当某个对象在其作用域内不再被其他对象引用的时候,Python 就自动清除对象; Python 的函数collect()可以一次性收集所有待处理的对象(gc.collect()) —————————————————————————分割线—————————————————————————————————

[14] 内部类

瘦欲@ 提交于 2020-01-26 06:19:54
1、内部类 什么是内部类,定义在其他类中的类称之为内部类。内部类也可以有访问权限修饰符,甚至可以标记为abstract或final。内部类与外部类实例有特殊的关系,这种关系即 允许内部类访问外部类的程序,也包括私有成员 。 内部类分为下面四种: 成员内部类 局部内部类 匿名内部类 静态内部类 1.1 成员内部类 正如其名,内部类声明在某个类中,如果要实例化一个内部类实例,需要一个外部类的实例作为依托, 内部类的实例只能通过外部类的实例来访问 。 不能存在static的变量和方法 必须先创建外部类才能创建内部类 普通类只有public可用修饰符,但是 内部类可以使用private和protected public class Demo { private int value = 1; public class InnerDemo { public void seeOuterValue() { System.out.println("Value is:" + value); } } } 11 1 public class Demo { 2 3 private int value = 1; 4 5 public class InnerDemo { 6 public void seeOuterValue() { 7 System.out.println("Value is:" +

malloc/free 与 new/delete的区别

人盡茶涼 提交于 2020-01-26 06:19:21
区别: new:只会调用一次构造函数,new申请的空间是单个类型的对象 new[]:申请的是一段连续的空间,会多次调用构造函数。 申请空间的方式必须与释放的方式成对使用: new:(底层是对malloc函数的封装) 申请空间----->(底层) void operator new(size 字节数) 循环调用malloc(size)申请空间 调用构造函数 在申请的空间中调用构造函数 delete:(对free函数进行封装) 先调用析构函数 释放对象中的资源 释放空间 ---->(底层) void operator delete(void *p) 循环使用free函数,对资源进行释放。 来源: CSDN 作者: bai小c 链接: https://blog.csdn.net/qq_42708024/article/details/103752713

Java 构造器

别等时光非礼了梦想. 提交于 2020-01-26 06:03:47
Java 构造器 构造器是什么? 1.构造器,也称构造方法、构造函数。作用是构造出来一个类的实例,确保对象得到初始化。 2.构造器的格式: 权限修饰符 类名(无参/有参){}。 3.根据有无参数,可分为无参构造 和有参构造。 构造器的特性# 1.与一般方法名不同的是,构造方法名必须和类名保持一致,并且没有返回值。 2.Java编译器会自动创建无参构造函数,因此在类中,无参构造即使没有,我们也可省略不写。实例化对象时无需赋值。 3.倘若类中已存在有参构造函数,则编译器不再提供默认无参构造。实例化对象时需赋值,不然报错。 4.当类实例化一个对象时会自动调用构造方法。 示例代码一:无参构造 学生类 public class Student { //权限修饰符是public,表示内部属性能被其他类访问到。若使用private,则需要set/get才能访问 public String name ; public int age ; //无参构造,编译器自带,可不写。 public Student ( ) { System . out . println ( "括号内无参数,这就是无参构造" ) ; } } 测试类 public class Test { public static void main ( String [ ] args ) { Student st = new Student

C++11 移动语义

元气小坏坏 提交于 2020-01-26 02:23:05
【1】为什么引入移动语义? 拷贝构造函数中为指针成员分配新的内存再进行内容拷贝的做法在C++编程中几乎被视为是最合理的。 不过在有些时候,我们会发现确实不需要这样的拷贝构造语义。 如下示例: 1 #include <iostream> 2 using namespace std; 3 4 class HasPtrMem 5 { 6 public: 7 HasPtrMem() : d(new int(0)) 8 { 9 cout << "Construct: " << ++n_cstr << endl; 10 } 11 HasPtrMem(const HasPtrMem & h) : d(new int(* h.d)) 12 { 13 cout << "Copy construct: " << ++n_cptr << endl; 14 } 15 ~ HasPtrMem() 16 { 17 cout << "Destruct: " << ++n_dstr << endl; 18 } 19 20 int* d; 21 static int n_cstr; // 统计构造函数调用次数 22 static int n_dstr; // 统计析构函数调用次数 23 static int n_cptr; // 统计拷贝构造函数调用次数 24 }; 25 26 int HasPtrMem::n