const

const、static关键字

旧巷老猫 提交于 2020-03-20 08:02:34
3 月,跳不动了?>>> 最近一直在迷惑着这两个关键字,感觉大脑里一片糊涂,特此整理一下: 一、const 1、数据常量,不能修改,必须初始化; 1)非类的数据成员 a、指向const对象的指针(remember) b、const指针(remember) 2)作为类的数据成员 a、必须在构造函数中进行初始化,并且必须在初始化列表中进行初始化; 引申:必须对任何const或引用类型成员以及没有默认构造函数的类类型的额任何成员使用初始化式; 2、const成员函数 作为类的const成员函数,const关键字放在函数声明的后面,在函数定义时,也必须将const关键字放在函数的后面(对于static不是这样)。 1)设计const成员函数主要是不改变对象,正因为这样一个const成员函数不可能再声明为static,因为static加在成员函数上就表明该函数属于类而不属于类对象; 2)const成员函数可以被const对象或者非const对象调用,当被const对象调用时,函数中的this指针就变成了一个指向const对象的const指针(因为this指针本书就是一个const指针,它就是指向调用该函数的对象); 二、static 静态的; 1、对于对象进行修饰 1)对于全局变量加上static关键字后其存储位置没有变,还是在全局存储区,但是缩小了其作用域,生命周期也没有变; 2

简单的多屏播放器示例(vlc+qt)

强颜欢笑 提交于 2020-03-20 07:26:30
介绍 简单的多屏播放器 最多同时播放16个视频 支持本地文件和rtsp、rtmp等流媒体播放 VS2015工程,依赖Qt+VLC 练手作品 截图 下载 程序: download.csdn.net/detail/u014755412/9908787 源码: github.com/FutaAlice/QtPlayer 代码分析 IMediaPlayer是为规定接口的基类 提供了播放和控制的几个常用函数 其中打开媒体部分拆分为了OpenURL和OpenFile,并在cpp中实现 若为Windows环境,则对QFileDialog获取的路径进行替换 /******************************************************************* IMediaPlayer.h(接口类) 构造时传入QWidget* 调用OpenFile或OpenURL或Open打开文件并渲染窗体 *******************************************************************/ #ifndef IMEDIAPLAYER_H #define IMEDIAPLAYER_H class QWidget; class IMediaPlayer { public: IMediaPlayer(QWidget* pWidget);

实验6:Problem F: 时间和日期类(IV)

≯℡__Kan透↙ 提交于 2020-03-19 13:59:05
Description 设计一个日期时间类,用于读取输入的数据,按格式输出日期和时间。 设计日期时间类DateTime由2个成员组成,分别是一个Date类对象和一个Time类对象; 设计DateTime类需支持以下操作: DateTime::DateTime()无参构造方法:初始化为1年1月1日、0时0分0秒; DateTime::DateTime(int,int,int,int,int,int)构造方法:依照参数(顺序为年月日、时分秒)初始化对象; 在上述两个DateTime类的构造函数中输出:“CREATE DateTime : (y, m, d, hh, mm, ss)”,其中y、m、d为初始化对象时的年月日值,h、m、s为初始化对象时的时分秒值。参见输出。 DateTime::DateTime(const Date&,const Time&)构造方法:依照参数传入的日期和时间初始化对象; 在这个DateTime类的构造函数中输出:“CREATE DateTime : (y, m, d) (hh, mm, ss)”,其中y、m、d为初始化对象时的年月日值,h、m、s为初始化对象时的时分秒值。参见输出。 DateTime:DateTime(const DateTime&)构造方法:拷贝构造函数,初始化对象。 在拷贝构造函数中输出:“COPY DateTime : (y, m,

对象的扩展

巧了我就是萌 提交于 2020-03-19 04:34:35
属性的简洁表示法 ES6 允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。 const foo = 'bar'; const baz = {foo}; baz // {foo: "bar"} // 等同于 const baz = {foo: foo}; 上面代码表明,ES6 允许在对象之中,直接写变量。这时,属性名为变量名, 属性值为变量的值。下面是另一个例子。 function f(x, y) { return {x, y}; } // 等同于 function f(x, y) { return {x: x, y: y}; } f(1, 2) // Object {x: 1, y: 2} 除了属性简写,方法也可以简写。 const o = { method() { return "Hello!"; } }; // 等同于 const o = { method: function() { return "Hello!"; } }; 下面是一个实际的例子。 let birth = '2000/01/01'; const Person = { name: '张三', //等同于birth: birth birth, // 等同于hello: function ()... hello() { console.log('我的名字是', this.name); } };

Go 基础

删除回忆录丶 提交于 2020-03-19 02:16:34
一、Go 语言结构 在我们开始学习 Go 编程语言的基础构建模块前,让我们先来了解 Go 语言最简单程序的结构。 Go Hello World 实例 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 & 表达式 注释 接下来让我们来看下简单的代码,该代码输出了"Hello World!": package main import "fmt" func main() { /* 这是我的第一个简单的程序 */ fmt.Println("Hello, World!") } 让我们来看下以上程序的各个部分: 第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。 下一行 import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。 下一行 func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。 下一行 /*...*/ 是注释,在程序执行时将被忽略。单行注释是最常见的注释形式

《es6标准入门》知识整理(3)

血红的双手。 提交于 2020-03-18 22:36:42
3 月,跳不动了?>>> Proxy介绍 Proxy 用于修改某些操作的默认行为;可以理解成,在目标对象之前架设一层"拦截",外界对对象的访问,都必须先通过这层拦截,因此提供了一层机制,可以对外界的访问进行过滤和改写。 const proxy = new Proxy(target,handler); target表示所要拦截的目标对象,handler参数也是一个对象,用来定制拦截行为。 const obj = new Proxy({}, { get: function(target, key, receiver) { console.log(`getting ${key}`); return Reflect.get(target, key, receiver); }, set: function(target, key, value,receiver) { console.log(`setting ${key}`) return Reflect.set(target, key, value, receiver) } }) obj.count = 1 console.log(++obj.count)//2 proxy实例的常见方法 get(target,prop,receiver ) :拦截某个属性的读取,三个参数依次为目标对象、属性名和 proxy 实例本身 receiver,

前台页面上传data image图片,java后台接收图片保存

泄露秘密 提交于 2020-03-18 22:10:18
最近在项目中有这么一个需求,就是上传一个视频文件,然后要获取视频文件的第一帧图片,这个可以通过canvas获取得到,得到的是一个dataURL,之后还要将这个图片上传到云,这个时候如何操作就不清楚了,于是乎,google一番,总结如下: 将dataURL转成Blob 利用formData 异步上传 function b64toBlob(b64Data, contentType='', sliceSize=512) { const byteCharacters = atob(b64Data); const byteArrays = []; for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) { const slice = byteCharacters.slice(offset, offset + sliceSize); const byteNumbers = new Array(slice.length); for (let i = 0; i < slice.length; i++) { byteNumbers[i] = slice.charCodeAt(i); } const byteArray = new Uint8Array(byteNumbers); byteArrays.push

JavaScript中的var、let和const

ⅰ亾dé卋堺 提交于 2020-03-18 21:56:53
3 月,跳不动了?>>> 使用var可以定义局部变量。 function myFunc () { var message = "Hello" ; var name = "John" , email = "john@somewhere.com" ; } 在执行程序时,ECMAScript自动将var变量移动到当前作用域的前面,这个机制叫做声明提升(declaration hoisting)。比如下面的代码: function myFunc () { console.log(message); var message = "Hello" ; } 在执行时被修改为: function myFunc () { var message ; console.log(message); message = "Hello" ; } 因此不会抛出ReferenceError。 另一个定义变量的方法是使用let。let和var的用法相似,区别在于作用域、重复声明、变量提升、全局可见性、循环可见性等方面。 let变量的作用域是当前块(block scoped),var变量则是当前函数(function scoped): function funcA ( n ) { if (n > 0) { var message = "positive" ; } else { var message = "non

c++动态链接库及静态链接库的生成与使用

核能气质少年 提交于 2020-03-18 19:48:21
1,新建控制台工程xdltest,改属性-配置属性-常规-配置类型为 动态库.dll或静态库.lib 2,打开工程后添加 dltest.h, dltest.cpp,其中.h与.cpp名字没必要一样 3,编写代码 ---------------------------------------------- --dltest.h #pragma once _declspec(dllexport) void Print(const char* str); ---------------------------------------------- --dltest.cpp #include<iostream> #include"dltest.h" void Print(const char* str) { std::cout << "dltest>> " << str << std::endl; } 4,编译,生成 <库的名字是根据工程名生成的> 若是静态库,则会生成 xdltest.lib. 若是动态链接库则生成 xdltest.lib 和 xdltest.dll 5,使用 (1)将xdltest.lib添加到 <属性-配置属性-链接器-输入-附加依赖项> (2)在<属性-配置属性-链接器-常规-附加库目录>中指定xdltest.lib的目录 (3)在<属性-配置属性-c/c++-常规

[cpp] 重载运算符规律总结

匆匆过客 提交于 2020-03-18 15:35:22
重载运算符是对正常函数的语法美化.没给语言增加任何基本的东西,但改善了可理解性并降低维护费用.当用户需要时,就应该使用运算符重载,但应该仅仅以用户熟悉的语义方式来使用它。 1. 重载规则 不能重载的运算符: . 和 .* 和 ?: 和 :: 和 sizeof 和 typeid 重载运算符有两种基本选择: 类的成员函数或者友元函数, 建议规则如下: 运算符 建议使用 所有一元运算符 成员函数 = () [] -> 必须是成员函数 += -= /= *= ^= &= != %= >>= <<= , 似乎带等号的都在这里了. 成员函数 所有其它二元运算符, 例如: –,+,*,/ 友元函数 2. 参数和返回值 当参数不会被改变,一般按const引用来传递(若是使用成员函数重载,函数也为const). 对于返回数值的决定: 1) 如果返回值可能出现在=号左边, 则只能作为左值, 返回非const引用。 2) 如果返回值只能出现在=号右边, 则只需作为右值, 返回const型引用或者const型值。 3) 如果返回值既可能出现在=号左边或者右边, 则其返回值须作为左值, 返回非const引用。 3. 几个例子 3.1 二元运算法建议使用友元函数重载,与内部类型的操作相似 1: class Integer { 2: int _val; 3: public: 4: Integer(int val