mooc西工大魏英老师的课程通道关闭了,难受.现在边看工程代码边重温刷第一遍C++时候的知识点,顺序没有按照大纲的来,想到哪写到哪. this是干啥用的? 简介:在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址.this 指针是所有成员函数的隐含参数.因此,在成员函数内部,它可以用来指向调用对象(意味着可以访问当前对象的所有成员). 实质:this 实际上是成员函数的一个形参,在调用成员函数时将对象的地址作为实参传递给 this.不过 this 这个形参是隐式的,它并不出现在代…
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制). C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制. 所以C与C++的最大区别在于它们的用于解决问题的思想方法不一样.之所以说C++比C更先进,是因为“ 设计这个概念已经被融入到C++之中…
如果*p被()包住,说明指针变量p将来指向的是函数 //声明一个指针变量 //int (*p)(int, int) = sum; int (*p)(int, int); p = sum; // 如果*p被()包住,说明指针变量p将来指向的是函数 // 最左边的void说明p指向的函数没有返回值 // 最右边的()说明p指向的函数没有形参 void (*p)(); // 函数名test就是test函数的地址 // 将test函数的地址赋值给了指针变量p // 指针变量p成功指向了test函数 p…
注:源码为学习<Windows核心编程>的一些尝试,非原创.若能有助于一二访客,幸甚. 1.程序框架 #include "Queue.h" #include <tchar.h> #include <windowsx.h> #include <StrSafe.h> #include <process.h> #include "resource.h" /*****************************…
1.System V IPC System V中引入的几种新的进程间通信方式,消息队列,信号量和共享内存,统称为System V IPC,其具体实例在内核中是以对象的形式出现的,称为IPC 对象,每个IPC对象在内核中都有一个唯一的标识符.这个标识符的唯一性在同一类IPC中成立,不同IPC的标识符可以相同.IPC对象三个知识点差不多,有一个数据结构,还有各自的使用的函数,这里只以消息队列为例,信号量和共享内存大家自己去看咯. IPC对象在程序中是使用关键字key来访问,服务端和客户端用的关键字必…
昨天写了闭包 今天就来聊聊块级作用域的事情 在绝大多数编程语言中,都有块级作用域这个概念 什么是块级作用域呢? 前面我们在刚开始讲的时候说过,JS中的大括号(不在赋值运算符的后面)表示代码块 块级作用域,指的就是这种代码块作用域 在其它类C的语言中,都拥有块级作用域 块级作用域 最常见的例子就是,在有块级作用域的语言中循环中声明的 i 只在当前的循环中可以访问,并不会污染全局变量 JS就不一样了,循环结束后 i 在循环的外部依然可以访问 for(var i = 0; i < 10; i++){…
前面的文章中,我在介绍JS中引用类型的时候提过,JS中函数有两种定义方式 第一种是声明函数,即使用function关键字来声明 第二种就是使用函数表达式,将函数以表达式的形式赋值给一个变量,这个变量就保存了对这个函数的引用 function与表达式的区别前文也已经详细分析过,这里就大概讲解一下 虽然两者在写法上没有什么不同,但是function关键字作为函数声明的时候,与var一样会有变量提升的效果 其本质是在JS创建执行环境的时候,就完成了对函数的声明,所以访问该函数的代码在函数声明语句前就可…
前几天有事耽搁了,今天继续更新 今天的主要内容是JS中的函数 这一篇主要讲函数的定义等内容,至于变量提升.执行环境.闭包.内存回收等内容在后面讲,高玩们可以不用看下面的正文了. 函数 首先来讲,函数对于任何编程语言都是一个十分核心的概念. Js中的函数通过function关键字来声明函数,函数用于封装任意多条语句,可以让我们用函数来来实现某一特定功能,避免编写重复的代码. 使用方法如下: function 函数名(参数){ // 要执行的代码块 } 跟其他语言中的函数相比JS中的函数存在以下特征…
私有变量 严格来讲,JS中没有私有成员的概念,所有对象属性都是公有的. 但是JS中有私有变量的概念 所有在函数中定义的变量都可以认为是私有变量,因为不能在函数外部进行访问 私有变量包括 1.函数参数 2.局部变量 3.函数内部定义的其他函数 还有一个概念叫 特权方法 特权方法指的就是有权能够访问私有变量的方法 私有变量和特权方法主要用来隐藏不应该被直接修改的数据 function Person(name){ this.getName = function(){ return name; } th…
昨天的文章中主要记录了,函数表达式与函数声明的区别 以及在JS中如何安全地使用递归 那么既然要深入地理解JS中的函数,闭包就是一个绕不开的概念 闭包 JS高编一书中对闭包的概念定义如下: 闭包是指有权访问另一个函数作用域中变量的函数 我们来理解这句话,闭包指的是一类函数 这类函数的特点是可以访问另一个函数的作用域 我们知道JS中Es6以下是没有块级作用域的 只有全局作用域,以及函数作用域 一般来讲,函数作用域里面的变量在函数外部是无法访问的 而闭包却可以访问另一个函数作用域,那么说明了什么? 说…
1.为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率 具体来说:为了使其他类的成员函数直接访问该类的私有变量 即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数 优点:能够提高效率,表达简单.清晰 缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数. 2.什么时候使用友元函数: 1)运算符重载的某些场合需要使用友元. 2)两个类要共享数据的时候 3.怎么使用友元函数: 友元函数的参数: 因为友元函数没有this指针,则…
1.为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率       具体来说:为了使其他类的成员函数直接访问该类的私有变量       即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数       优点:能够提高效率,表达简单.清晰       缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数. 2.什么时候使用友元函数:       1)运算符重载的某些场合需要使用友元.       2)两个类要共享数据的时候 3…
1.为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率 具体来说:为了使其他类的成员函数直接访问该类的私有变量 即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数 优点:能够提高效率,表达简单.清晰 缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数. 2.什么时候使用友元函数: 1)运算符重载的某些场合需要使用友元. 2)两个类要共享数据的时候 3.怎么使用友元函数: 友元函数的参数: 因为友元函数没有this指针,则…
 原文地址:http://blog.csdn.net/insistgogo/article/details/6608672   1.为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率 具体来说:为了使其他类的成员函数直接访问该类的私有变量 即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数 优点:能够提高效率,表达简单.清晰 缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数. 2.什么时候使用友元函数: 1)运算符重载…
1.为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率 具体来说:为了使其他类的成员函数直接访问该类的私有变量 即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数 优点:能够提高效率,表达简单.清晰 缺点:友元函数破环了封装机制,尽量不使用成员函数,除非不得已的情况下才使用友元函数. 2.什么时候使用友元函数: 1)运算符重载的某些场合需要使用友元. 2)两个类要共享数据的时候 3.怎么使用友元函数: 友元函数的参数: 因为友元函数没有this指针,则…
C++学习之友元类和友元函数       模板类声明也可以有友元,模板的友元可以分为以下几类:        1.非模板友元:        2.约束模板友元,即就是友元的类型取决于类被实例化的时候的类型:        3.非约束模板友元,即就是友元的所有具体化都是类的每一个具体化的友元. 一.非模板友元        在我们编程的时候可以在模板类中声明一个友元函数,如下面所示:        template<class T>        class lei        {      …
友元函数和友元类在实际开发中较少使用,想快速学习C++的读者可以跳过本节. 一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员.现在,我们来补充介绍一个例外——友元(friend). 在C++中,这种关系以关键宇 friend 声明,中文多译为友元.友元可以访问与其有好友关系的类中的私有成员,友元包括友元函数和友元类.如果您对友元这个名词不习惯,可以按原文 friend 理解…
---恢复内容开始--- 学习C++类知识点还是挺多的,每个知识点学习的时候都觉得这个知识点咋那么多东西,其实真学完了再回头看好像也就那么点.这次用程序写一个黑猫揍白猫的故事总结一下这段时间学习的零碎知识点.包括以下几点: 1.重载:函数重载 .运算符重载 2.友元函数 3.静态成员变量 4.new / delete 关键字和 malloc / free函数的区别 程序将实现一个Cat类,定义一只黑猫一只白猫.用户喂食黑猫为黑猫增加武力值,之后用户给白猫喂食,为白猫增加生命值,两只猫都喂食完后黑…
(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 对运算符重载的函数有两种处理方式:(1)把运算符重载的函数作为类的成员函数:(2)运算符重载的函数不是类的成员函数,在类中把它声明为友元函数. 1    把运算符重载函数作为类的成员函数 在上一篇博客(http://www.cnblogs.com/hust-ghtao/p/3525522.html)中,运算符重载函数 operator + 就是属于这种形式…
成员函数的指针 讲友元之前先讲普通的成员函数的函数指针 class Std_interface { public: virtual void suspend() = 0; }; // define the pointer of function typedef void (Std_interface::* Pstd_mem) () void f(Std_interface* p) { Pstd_mem s = &Std_interface::suspend; // call directly p…
运算符重载(Operator overloading) 从我们在几个前篇的类的层次介绍中可以知道,C++可以扩展标准运算符,使其适用于新类型.这种技术称为运算符重载. 例如,字符串类重载+运算符,使其在应用于字符串时的行为会有所不同. 当C++编译器看到 + 运算符时,它通过查看操作数的类型来决定使用的是哪种运算,如果编译器看到 + 应用于两个整数,它会采用我们一般的数字相加. 如果操作数是字符串,那么实现的就是两个字符串之间的连接. 重载运算符的能力是C++的一个强大功能,可以使程序更容易阅读…
吧啦吧啦内心戏 在没有具体学作用域之前,我在之前的学习笔记中就有提到 我开始以为是自己自创的词儿 没想到这个词早已经存在(手动捂脸) 真是个无知的小火锅(不知者无罪) 我发现自己最擅长做的事情,就是给自己找个台阶,然后很快顺势滑下来 一.作用域 先来一段代码分析一波吧 name = 'xhg' def name1(): name = 'aa' def name2(): name = 'bb' print(name) return name2 a = name1() print(a) a() #执…
Go语言学习笔记九: 指针 指针的概念是当时学C语言时了解的.Go语言的指针感觉与C语言的没啥不同. 指针定义与使用 指针变量是保存内存地址的变量.其他变量保存的是数值,而指针变量保存的是内存地址.这个内存地址可能保存者一个基本数值. 指针变量也是有类型的.它需要知道自己保存的内存地址指向数值的类型,因为不同的数值类型占用的空间大小是不同的. 在指针中有两个重要的符号需要了解: &和. 其中&是用于获取普通变量的地址,而是获取内存地址指向的数值.看起来就是一对反向操作. 另外在声明指针时也…
初探C++运算符重载学习笔记 在上面那篇博客中,写了将运算符重载为普通函数或类的成员函数这两种情况. 以下的两种情况发生.则我们须要将运算符重载为类的友元函数 <1>成员函数不能满足要求 <2>普通函数又不能訪问类的私有成员时 举例说明: class Complex{ double real, imag; public: Complex(double r, double i):real(r), imag(i){ }; Complex operator+(double r); };…
1static强化练习-仓库进货和出货 #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; class Goods { public: // 无参数的构造函数 Goods() { next = NULL; weight = 0; cout << "创建了一个货物重量是" << 0 << "的物品" << endl;…
什么是函数指针 函数指针是指向函数的指针变量.也就是说,它是一个指针变量,而且该指针指向一个函数. 对于指针变量来说,它的值是它指向的变量的地址.举个例子:指针变量pi是指向一个整型变量i的指针,则变量i的地址 &i 就是指针变量pi的值.也就是说整型变量指针指向一个整型变量,而整型变量指针的值就是它所指的整型变量的地址.与其它类型指针变量一样,函数指针变量的值就是它指向的函数的地址. 那么什么是函数的地址呢? 我们首先来看函数调用是怎么回事.在程序运行时,一个函数占用一段连续的内存.当调用一个…
版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 一:函数指针 1.函数指针顾名思义就是定义一个指针变量指向一个函数,和一级指针并没有很大的区别我们看如下代码就很清楚的知道了 #include<stdio.h> #include<stdlib.h> //定义一个函数 int add(int a,int b) { return a + b; } main() { //定义函数指针 //返回值类型,变量名可以随便…
官方资料:Shell Functions (Bash Reference Manual) 简介 正如我们在<Bash脚本编程学习笔记06:条件结构体>中最后所说的,我们应该把一些可能反复执行的代码块整合起来,避免反复编写使得代码过于臃肿. 函数正是为了解决这个问题而存在的.函数在定义时,可以将常用的代码整合为一个整体,当我们需要执行的时候,只需要调用这个函数即可. Bash是过程式编程语言,从上至下顺序执行代码,因此函数定义必须在函数调用之前完成. 函数属于shell的基础特性,即不仅仅是针对…
◆ 引用调用与指针传值调用C++中函数的参数的基本使用方法是传值.为了弥补单纯传值的不足,以引用作为函数的参数,从逻辑上讲引用是别名,在函数中对参数的操作,就是对实参的操作,而在物理上是传实参的地址. 将指针用作函数的参数时,传的仍然是值,指针的值,这个值就是指针所指向的变量或对象的内存首地址,在物理上传的是指针的值,在逻辑上讲是把另一个变量的地址传过去了,可以看作传地址. 建议在函数参数传递中,能用“引用”时绝不用“指针”. [例5.9]用指针代替引用实现两数据的交换. #include "s…
函数如果带*的返回的就是指针 char *test(){ } #include <stdio.h> char *test(); /* 返回指针的函数 */ int main() { char *name = test(); printf("name=%s\n", name); ; } char *test() { return "rose"; }  …