扩展1(代码片段)

kirinsb kirinsb     2023-03-18     541

关键词:

1、必须在构造函数初始化列表里初始化的成员

  1. 常量成员和引用类型:因为const常量成员和引用类型必须要初始化且不能赋值。
  2. 特殊情况的对象:这个对象是一个类或结构体,并且他只有带参数的构造函数没有默认构造函数,那么一定要在初始化列表初始化(编译器无法帮助生成无参构造函数)。
  3. 子类初始化父类的私有成员:必须在初始化列表调用父类的带参构造函数,如果在构造函数里面调用父类的带参构造函数,那么初始化的结果可能是个未知值。
  4. 为了效率:不用初始化列表,类对自己的类成员分别进行的是一次隐式的默认构造函数的调用,和一次赋值操作符的调用。

2、函数指针,指针函数

函数指针:是一个指针,它指向一个函数的入口地址。

int print() return 1; 
int main()
    int (*f1)() = print;
    int (*f2)() = &print;
    f1();
    (*f1)();
    return 0;

指针函数:是一个函数,它返回一个指针。

int* print() int a = 1;return &a; 

3、模板的特化

特化:使用模板有时会用到某些特殊类型需要特殊处理,那么就要特化出一个模板。模板特化中,template<>中不用写类型,特化函数的参数列表中的类型使用特化类型。
全特化:有一个主模板,所有类型全部被明确化。
偏特化:有一个主模板,只有部分类型被明确化,其余的靠主模板实例化。

template<typename T, typename U>    //主模板
bool isEqual(T &a, U &b)
    return sizeof(a) == sizeof(b);

template<>  //全特化
bool isEqual(char* &a, char* &b)
    return strncmp(a, b, sizeof(a)) == 0;

template<>  //偏特化
bool isEqual(string &a, U &b)
    return sizeof(a) == sizeof(b);

4、如何让类对象只在栈(堆)上分配空间?

静态建立对象:由编译器为对象在栈中分配内存。使用方法为,直接调用构造函数。
动态建立对象:使用new在堆中分配对象。

只在堆中:
不要直接将构造函数设为private,这样new的时候不能调用构造函数了。编译器在为对象分配栈空间时,会先查看析构函数访问性,如果是私有的就不会在栈上分配。所以把析构函数设为private。

class A
public:
    A()
    static A* construct()
        return new A();
    
    void destroy()
        delete this;
    
private:
    ~A()
;

只在栈中:
不使用new即可,重载operator new,设为private访问。

class A
public:
    A()
    ~A()
private:
    void* operator new(size_t t)
    void operator delete(void* ptr)
;

参考资料

C++必须使用【初始化列表】初始化数据成员的三种情况
c++中模板的特化
《More Effective C++》条款27:如何让类对象只在栈(堆)上分配空间?

javascriptes6-数组扩展(代码片段)

本章节的主要内容是:ES6数组扩展一:数组扩展:1.数组新增特性<10个API>1.Array.from()2.Array.of()3.copyWithin()4.find/findIndex5.fill()6.entries()/keys()/values()7.includes()如图所示:1.ES6Array.from()/**1.Array.from()1.用于将两类对象转化为 查看详情

es6对象扩展——扩展运算符(代码片段)

1、复制对象:使用扩展运算符复制对象时是浅拷贝//复制对象:使用扩展运算符复制对象时是浅拷贝constobj1=a:1,b:2,d:aa:1,bb:2constobj2=c:3,a:9constcObj1=...obj1;console.log(cObj1.d.aa);//1cObj1.d.aa=999;console.log(cObj1.d.aa);//999console.lo 查看详情

es6-函数的扩展(代码片段)

/**1:函数参数的默认值**/!(()=>functionf(x,y=1,z=1,g=1)console.log(x,y,z,g);//1,1,false,nullf(1,undefined,false,null);)();/**2与解构赋值结合使用**/!(()=>functionf(x=1,y=)console.log(x,y)functionf1(x,y 查看详情

javascriptes6-函数扩展(代码片段)

本章节的主要内容是:ES6函数扩展一:函数扩展1.函数新增特性:1.参数默认值2.rest参数3.扩展运算符4.箭头函数5.this绑定6.尾调用如图所示:1.ES6函数参数默认值/**1.函数参数默认值1.ES6设置默认值,直接写在参数定义的后面。2.细节知识... 查看详情

安装mongodb扩展(代码片段)

curl-Ohttps://pecl.php.net/get/mongodb-1.2.3.tgztarzxfmongodb-1.2.3.tgzcdmongodb-1.2.3phpize./configure--with-php-config=/usr/local/php/bin/php-configmake&&makeinstall  查看详情

数组扩展(代码片段)

数组扩展function*g()console.log(1)yield'one'console.log(2)yield'two'constgg=g()gg.next()setTimeout(function()gg.next(),1000)在第一次使用gg.next()时运行,知道第二个gg.next()出现在运行第二段letset=newSet([1,2, 查看详情

javascriptes6-正则表达式扩展(代码片段)

正则扩展:主要来与ES5做一个对比(也就是语法的扩展)1.ES6正则新特性:​1.构造函数的变化​2.正则方法的扩展:字符串支持的处理方法(注意字符串的处理方式扩展在下面各个知识点中,并没有单独作为一个模块来分析)​3.u修饰符​4... 查看详情

函数的扩展(代码片段)

1.函数参数的默认值es5写法:functionlog(x,y)  if(typeofy==="undefined")  y=‘World‘;   console.log(x,y);log(‘Hello‘)//HelloWorldlog(‘Hello‘,‘China‘)//HelloChinalog(‘Hello‘,‘‘)//Helloes6写法:1.functionlog(x,y=‘Wo 查看详情

spi机制-插件化扩展功能(代码片段)

删除数组元素unsetunset删除数组元素,不会重建索引//demo1$arr=[1,2,3];array_push($arr,4);unset($arr[count($arr)-1]);array_push($arr,5);print_r($arr);//Array([0]=>1[1]=>2[2]=>3[4]=>5)//demo2$arr=[1,2,3];unset($ 查看详情

php7.1-soap扩展安装(代码片段)

1.下载php7.1.27源码包cd/root&wget-Ophp7.1.27.tar.gzhttp://cn2.php.net/get/php-7.1.27.tar.gz/from/this/mirror2.解压源码包tar-xvfphp7.1.27.tar.gz3.进入目录cdphp7.1.274.配置PHP安装以包含SOAP./configure--enable-soap=share 查看详情

js之es6(代码片段)

一、ES6的内置对象扩展1、Array的扩展方法(★★)1)扩展运算符(展开语法)扩展运算符可以将数组或者对象转为用逗号分隔的参数序列letary=[1,2,3];...ary//1,2,3console.log(...ary);//123,相当于下面的代码console.log(... 查看详情

spring4.1.8扩展实战之四:感知spring容器变化(smartlifecycle接口)(代码片段)

欢迎访问我的GitHub本篇概览本章是《spring4.1.8扩展实战》的第四篇,如果业务上需要在spring容器启动和关闭的时候做一些操作,可以自定义SmartLifecycle接口的实现类来扩展,本章我们通过先分析再实战的方法,来掌握这种扩展方... 查看详情

idmchrome扩展被阻止解决办法(代码片段)

方法1:1、找到安装目录下的IDMGCExt.crx2、复制出来,并将扩展名改为.rar3、解压到IDMGCExt/4、把IDMGCExt这个文件夹扔进硬盘【随便哪里,能找到就好5、进入chrome设置——扩展程序——加载正在开发的应用程序6、在弹出的目录中找... 查看详情

ecmascript6数组的扩展(代码片段)

一、扩展运算符1.介绍扩展运算符(spread)是三个点(...)。它是将一个数组转为用逗号分隔的参数序列。console.log(...[1,2,3])//转换为console.log(1,2,3);//输出的结果为:123console.log(1,...[2,3,4],5);//转换为console.log(1,2,3,4,5);//输出的结果... 查看详情

djangoform组件扩展(代码片段)

1简单扩展 利用form组件自带的正则扩展:  a.方式一fromdjango.formsimportFormfromdjango.formsimportwidgetsfromdjango.formsimportfieldsfromdjango.core.validatorsimportRegexValidatorclassMyForm(Form):user=fiel 查看详情

bsgs及扩展bsgs模板(代码片段)

BSGS#include<iostream>//poj2417#include<cstring>#include<cstdio>#include<cmath>#include<algorithm>#definelllonglongusingnamespacestd;constintmaxint=((1<<30)-1)*2+1; 查看详情

扩展随机数(代码片段)

随机数生成(1)可使用random等系统函数,构造函rand15:在[1,5]范围,均匀分布随机函数 (2)不可使用random,仅仅基于rand15构造rand112:在[1,12]范围,均匀分贝的随机函数(3)函数randint26:在【2,3,4,5范围内等概率生成某个整... 查看详情

mircopython的组件扩展方法(代码片段)

1、背景本节内容将详细介绍如何扩展一个新的MicroPython的组件。组件扩展方式分两种:模块扩展,模块+类扩展。右边netmgr功能以模块的方式扩展的,在使用的时候直接导入模块进行使用。左边的ADC是通过模块+... 查看详情