函数调用

c++函数笔记

萝らか妹 提交于 2020-02-06 05:56:55
构造函数 名字与类名相同,可以有参数,不能有返回值(void 也不行) 作用是对对象进行初始化,编译器会默认生成一个构造函数(什么也不干) 对一个对象构造函数必定调用,且只会调用一次 一个类可以有多个构造函数,参数个数或类型不同(可以有默认类型转换,如int转double) class TEST { public : TEST ( int n ) { } //1 TEST ( int n , int m ) { } //2 TEST ( ) { } //3 } ; TEST array [ 3 ] = { 1 , TEST ( 1 , 2 ) } ; 三个元素分别用 1 , 2 , 3 初始化 TEST * p [ 3 ] = { new TEST ( 4 ) , new TEST ( 1 , 2 ) } ; 只有两个元素被初始化,分别用 1 , 2 析构函数 名字是对象名前加一个~ 如~TEST() 没有参数和返回值,一个类只能有一个析构函数,不像构造函数可以重载 默认生成析构函数,对象生命期结束时会自动调用析构函数 一般用来删除空间 class TEST { public : ~ TEST ( ) { cout << "destruction" << endl ; } } ; int main ( ) { TEST array [ 2 ] ; cout << "end main

Step By Step(C++模板重载和特化)

十年热恋 提交于 2020-02-06 05:44:13
一、模板函数重载: 函数重载是一个非常通用亦非常容易理解的编程基础概念,既函数名相同而函数签名不同的一组函数,在实际的调用中,编译器会根据函数参数的不同自动选择最为合适且最为特化的函数。在推演的过程中,如果出现多个函数均符合该调用规则,编译器将根据其内置的特化规则,选择最为特殊的函数作为候选函数。然而如果仍有多个候选函数的话,编译器将报出二义性错误。和普通函数一样,在C++中模板函数也同样支持函数重载的功能,甚至可以将模板函数与普通函数混合在一起,以达到更为灵活的函数重载的效果。 在这里,我们对于函数重载的概念本身将不再做过多的赘述了,而是将重点放在模板函数重载的应用场景和应用技巧上。下面我将给出一个利用模板函数重载计算哈希值的代码示例: 1 #include <stdio.h> 2 3 template<typename T> 4 int hash_code(T v) { 5 return v.hashCode() * 2; 6 } 7 8 template<typename T> 9 int hash_code(T* v) { 10 return v->hashCode(); 11 } 12 13 int hash_code(const int v) { 14 return v + 100; 15 } 16 17 class HashClass { 18 public: 19

C++ 模板与泛型编程

跟風遠走 提交于 2020-02-06 05:27:24
《C++ Primer 4th》读书笔记 所谓泛型编程就是以独立于任何特定类型的方式编写代码。泛型编程与面向对象编程一样,都依赖于某种形式的多态性。 面向对象编程中的多态性在运行时应用于存在继承关系的类。我们能够编写使用这些类的代码,忽略基类与派生类之间类型上的差异。 在泛型编程中,我们所编写的类和函数能够多态地用于跨越编译时不相关的类型。一个类或一个函数可以用来操纵多种类型的对象。 面向对象编程所依赖的多态性称为运行时多态性,泛型编程所依赖的多态性称为编译时多态性或参数式多态性。 模板是泛型编程的基础。模板是创建类或函数的蓝图或公式。 函数模板 模板定义以关键字 template 开始,后接模板形参表,模板形参表是用尖括号括住的一个或多个模板形参的列表,形参之间以逗号分隔。模板形参表不能为空。 template <typename T> int compare(const T &v1, const T &v2) { if (v1 < v2) return -1; if (v2 < v1) return 1; return 0; } 模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。类型形参跟在关键字 class 或 typename 之后定义.在函数模板形参表中,关键字 typename 和 class 具有相同含义,可以互换使用

获取函数调用堆栈

大憨熊 提交于 2020-02-06 05:18:41
int backtrace(void **buffer,int size) 该函数用于获取当前线程的调用堆栈,获取的信息将会被存放在buffer中,它是一个指针列表。参数 size 用来指定buffer中可以保存多少个void* 元素。函数返回值是实际获取的指针个数,最大不超过size大小。 在buffer中的指针实际是从堆栈中获取的返回地址,每一个堆栈框架有一个返回地址。 注意:某些编译器的优化选项对获取正确的调用堆栈有干扰,另外内联函数没有堆栈框架;删除框架指针也会导致无法正确解析堆栈内容。 1. 代码: #include <stdio.h> #include <stdlib.h> #include <stddef.h> #include <execinfo.h> #include <signal.h> void dump(int signo) { void *buffer[30] = {0}; size_t size; char **strings = NULL; size_t i = 0; size = backtrace(buffer, 30); fprintf(stdout, "Obtained %zd stack frames.nm\n", size); strings = backtrace_symbols(buffer, size); if (strings ==

【1/33】调用堆栈

你说的曾经没有我的故事 提交于 2020-02-06 03:44:46
33 文章目录 调用栈 JavaScript 引擎 执行上下文 创建执行上下文 变量环境: 执行阶段 javascript事件循环 setTimeout setInterval Promise与process.nextTick(callback) 调用栈 调用栈 是解释器(就像浏览器中的JavaScript解释器)追踪函数执行流的一种机制。当执行环境中调用了多个函数函数时,通过这种机制,我们能够追踪到哪个函数正在执行,执行的函数体中又调用了哪个函数。 拥有 LIFO(后进先出)数据结构的栈,被用来存储代码运行时创建的所有执行上下文。 当 JavaScript 引擎第一次遇到你的脚本时,它会创建一个全局的执行上下文并且压入当前执行栈。每当引擎遇到一个函数调用,它会为该函数创建一个新的执行上下文并压入栈的顶部。 每调用一个函数,解释器就会把该函数添加进调用栈并开始执行。每一个进入调用栈的都称为 调用帧 。 正在调用栈中执行的函数还调用了其它函数,那么新函数也将会被添加进调用栈,一旦这个函数被调用,便会立即执行。 当前函数执行完毕后,解释器将其清出调用栈,继续执行当前执行环境下的剩余的代码。 当分配的调用栈空间被占满时,会引发 堆栈溢出 。 JavaScript 引擎 谷歌的 V8 引擎: 在这里插入代码片 这个引擎主要由两部分组成: 内存堆:这是内存分配发生的地方 调用栈

MySQL学习笔记——〇四

妖精的绣舞 提交于 2020-02-06 01:15:42
今天我们继续对MySQL内容进行一些补充,但是今天所讲的内容已经不是平时常用的了。 先穿插一条指令贯穿了今天所讲的所有知识点: MySQL结束符 结束符delimiter其实就是告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了。默认情况下,delimiter是分号;。在命令行客户端中,如果有一行命令以分号结束,那么回车后,mysql将会执行该命令。 但是在今天的知识点中我们经常需要用到begin...end这种结构体,那么在结构体中的sql语句后的分号就不能作为结束符了,我们需要随便设置一个结束符,在结构体结束后再换回分号。 MySQL视图(View) 如果我们在日常进行数据库维护过程中需要一个重复的虚拟表,这个虚拟表的构建过程我们要敲很多次,MySQL给我们提供了一个对齐进行优化的方法_视图(View)。 视图的创建 比方我们今天需要对一个用户表中id>10的用户进行操作,这个操作要重复好多好多次,那么我们就要写好多次这样的代码 select *from (select * from table where id>10) as t; 这个时候,为了提高效率,我们就可以创建一个视图 create view v1 as select * from table where id>10; 这个时候我们只需要调用v1就可以了。 注意:视图是一个虚拟的表,是动态的

Cracking Digital VLSI Verification Interview 第三章

大憨熊 提交于 2020-02-05 21:49:51
目录 Programming Basics Basic Programming Concepts Object Oriented Programming Concepts UNIX/Linux Programming in C/C++ Programming in PERL Programming Basics Basic Programming Concepts [68] 在任何一种编程语言中,静态(static)变量和自动(automatic)变量,局部(local)变量和全局(global)变量之间有什么区别? 区分这些名词需要两个概念,作用域(scope)和存储持续时间(storage duration),前者定义了在何处可以访问变量,后者定义了在何时可以访问变量。 按照变量的作用域可以区分局部(local)和全局(global)变量。局部变量的作用范围有限,尽在声明它们的代码块中可见。而全局变量在声明后在程序的任何位置都可见。 存储持续时间可以区分自动(automatic)变量和静态(static)变量。静态变量的生命周其一直持续到程序结束,因此可以始终访问。自动变量具有有限的生命周期,只能持续到程序离开定义的块或者作用域为止。 例如:在以下的systemverilog代码中,global_int被声明为类成员,并且在整个类中具有全局作用域,而当取消引用该类的对象时

Day12-函数式接口

本秂侑毒 提交于 2020-02-05 21:31:48
第一章 函数式接口 1.1 概念 在java中指: 有且只有一个抽象方法的接口 ,当然接口中可以包含其他的方法(默认,静态,私有) 语法糖 指更加方便,单元里不变的代码语法。如for-each语法的底层仍是迭代器。Lambda表达式是匿名内部类的语法糖,但实现原理不同。 1.2 @FunctionalInterface注解 作用:检测接口是否为函数式接口 1.3 使用 作为 参数 或 返回值类型 package day12 . demo01 . FunctionalInterface ; /* 函数式接口的使用:一般可以作为方法的参数和返回值类型 */ public class Demo { //定义一个方法,参数使用函数式接口MyFunctionalInterface public static void show ( MyFunctionalInterface myInter ) { myInter . method ( ) ; } public static void main ( String [ ] args ) { //调用show方法,方法的参数是一个接口,所以可以传递接口的实现类对象 show ( new MyFunctionalInterfaceImpl ( ) ) ; //调用show方法,方法的参数是一个接口,所以我们可以传递接口的匿名内部类 show (

C++学习笔记3

妖精的绣舞 提交于 2020-02-05 19:09:32
三、类和对象 1、类的概念 类是具有共同性质的一类事物的统称, 而对象是根据抽象的概念实例化出来的一个实际对象 C 结构: 结构体成员是数据; C++中的类: 类的成员是 数据和函数(数据成员、成员函数) 成员的访问权限有: 1) 私有成员: private, 它只能被该结构中的其他成员访问 2) 保护成员: protected 不涉及到派生的时候与 private 一样, 后面会详细讲解 3) 公有成员: public, 即可以被结构中的其他成员访问, 又可以被结构外的其他成员访问 把结构体的struct换成class即成为类的定义 类的数据成员默认访问权限是私有的,类的成员和结构体成员的访问方式一致,都是用点 #include<iostream> using namespace std; class stu{ public : int num; void setAge(int a) { age = a;//即使age在下面定义也可以在上面先使用,C++认为类是一个整体 } int getAge(void) { return age; } private: int age; char name[100]; }; int main() { stu lucy; lucy.num=100; cout << "lucy.num = "<< lucy.num<<endl; lucy

Hook学习

守給你的承諾、 提交于 2020-02-05 16:56:06
转载: 一、基本概念: 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。 二、运行机制: 1、钩子链表和钩子子程: 每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。 Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表。如果程序安装了钩子