函数调用

Python学习之==>面向对象编程(一)

时间秒杀一切 提交于 2020-03-21 01:44:46
一、面向对象与面向过程   面向对象与面向过程是两种不同的编程范式,范式指的是按照什么方式去编程、去实现一个功能。不同的编程范式本质上代表对各种不同类型的任务采取不同的解决问题的思路。 1、面向过程编程   角色是执行者,把一个项目按照一定的顺序,从头到尾一步步执行下去。这种思想好理解,但只要前面一个步骤变了,后面的步骤也要跟着变,维护起来比较麻烦。 2、面向对象编程   角色是指挥者,把一个项目分成一个个小的部分,每个部分负责一方面的功能,整个项目由这些部分组合而成一个整体。类似一个机关,分为各个职能部门,只要符合一定的前提就行。面向对象的思想适合多人分工合作。   面向对象是包含面向过程思路的,比如定义类中的方法,每个小方法、小功能还是面向过程的的思想。   面向对象与面向过程的主要区别就是:面向对象可以使程序更加容易更改和扩展。 二、面向对象的特性 1、类   Class,相当于一个种类、一个模型。一个类就是对一类拥有相同属性的对象的抽象、蓝图、原形。在类中定义了这些对象都具备的属性、共同的方法。 2、对象(实例)   Object,根据模型造出来的具体的东西。一个对象就是一个类实例化后实例。一个类必须经过实例化后才能在程序中调用,一个类可以实例化多个对象,每个对象也可以有不同的属性。(对象就是实例,两者是一个意思) 3、实例化   初始化一个类,创造一个对象

python——open()函数打开文件和读写

自闭症网瘾萝莉.ら 提交于 2020-03-20 23:43:16
注意:Windows系统文件路径中的斜线符号为'\'调用open()函数打开相应文件路径调用读写函数写入数据1、教程示例: 2、实战示例: 运行结果为: 3、总结 →python用反斜杠'\'转义字符,所以错误案例中的'\'被用作转义,导致解释器解释文件路径错误。 →路径书写有两种方法: 第一、将'\'的方向反向为'/',即文首正确的写法; 第二、在含有转义符的字符串前加 ‘r' 表示字符串内按原始含义解释,不做转义处理。(推荐!) 来源: https://www.cnblogs.com/xzxgiser/p/12535580.html

Dependency Walker使用说明

杀马特。学长 韩版系。学妹 提交于 2020-03-20 22:04:03
在Windows世界中,有无数块活动的大陆,它们都有一个共同的名字——动态链接库。现在就让我们走进这些神奇的活动大陆,找出它们隐藏已久的秘密吧! 初窥门径:Windows的基石 随便打开一个系统目录,一眼望去就能看到很多扩展名DLL的文件,这些就是经常说的“动态链接库”,DLL是Dynamic Link Library(即“动态链接库”)的缩写。从Microsoft公司推出首个版本的Windows以来,动态链接库就一直是这个操作系统的基础。 1.看看DLL里有什么 与其用晦涩的专业术语来解决DLL是什么,不如先来看看DLL里有什么。DLL和EXE文件一样,其中包含的也是程序的二进制执行代码和程序所需的资源(比如图标、对话框、字符串等),可是为什么要把代码放在DLL里面,而不是做成EXE呢?其实DLL中的代码是以API函数形式出现的,通俗地说,DLL中包含的程序代码都被做成了一个个小模块,应用程序通过按下所需DLL中特定的按钮,来调用DLL中这个按钮所代表的功能。在使用“记事本”等程序时,如果要保存文件或打开文件,就会弹出通用文件对话框,让我们选择文件位置。你可知道,这就是调用了系统底层DLL中的通用对话框界面。 2.系统中几个重要的DLL Windows中有3个非常重要的底层DLL:Kernel32.dll、User32.dll、GDI32.dll。其中Kernel32

尽可能使用const

我怕爱的太早我们不能终老 提交于 2020-03-20 21:59:13
1、const用于定义常量 编译器可以对其进行静态数据类型检查 2、const可用于修饰形式参数 若你在编写函数时,并没有打算改变参数,这是就应该将参数的类型设置为const reference,这样既可以保证参数的常量性,又提高了传值的效率 3、const修饰返回值 若函数的返回值时const pointer,则返回值不可被直接修改,而且返回值必须赋值给const同种类型 令函数返回一个常量值,该const为顶层const,编译器会直接忽视其作用,但有时会降低因用户的错误而造成的意外 1 class Rational {}; 2 const Rational operator*(const Rational& lhs, const Rational& rhs); 3 4 Rational a, b, c; 5 6 (a * b) = c; //编译错误 7 if ((a * b) = c) //编译错误 4、const成员函数 可以保证该成员函数可以作用于const对象身上 两个成员函数如果只是常量性(constness)不同,可以被重载 bitwise constness   成员函数只有在不更改对象的非静态成员变量时才可以说是const,即不更改对象内的任何一个bit,但是有一种特殊情况,类的数据成员为指针,改变指针所指之物并不会改变对象的常量性,可以通过bitwise

GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点:inline关键字在G

十年热恋 提交于 2020-03-20 10:28:44
本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点: inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare)。 从 inline的作用来看,其放置于函数声明中应当也是毫无作用的:inline只会影响函数在translation unit(可以简单理解为C源码文件)内的编译行为,只要超出了这个范围inline属性就没有任何作用了。所以inline关键字不应该出现在函数声明 中,没有任何作用不说,有时还可能造成编译错误(在包含了sys/compiler.h的情况下,声明中出现inline关键字的部分通常无法编译通 过); inline 关键字仅仅是建议编译器做内联展开处理,而不是强制。在gcc编译器中,如果编译优化设置为-O0,即使是inline函数也不会被内联展开,除非设置了强制内联(__attribute__((always_inline)))属性。 1. GCC 的 inline gcc对C语言的inline做了自己的扩展,其行为与C99标准中的inline有较大的不同。 1.1. static inline GCC 的static inline定义很容易理解:你可以把它认为是一个static的函数,加上了inline的属性

恼人的函数指针(二):指向类成员的指针

ε祈祈猫儿з 提交于 2020-03-20 07:50:01
3 月,跳不动了?>>> 前面曾写过一篇 恼人的函数指针(一) ,总结了普通函数指针的声明、定义以及调用,还有函数指针数组,函数指针用作返回值等。但是作为C++的研读,我发现我漏掉了一个最重要的内容,就是 指向类成员的指针 ,这里将做相应补充(相关代码测试环境为vs 2010)。 指向类成员的指针总的来讲可以分为两大类四小类(指向数据成员还是成员函数,指向普通成员还是静态成员),下面一一做介绍: 一、指向类的普通成员的指针( 非静态 ) 1、指向类 成员函数 的指针 简单的讲,指向类成员函数的指针与普通函数指针的区别在于,前者不仅要匹配函数的参数类型和个数以及返回值类型,还要匹配该函数指针所属的类类型。总结一下,比较以下几点: a)参数类型和个数 b)返回值类型 c) 所属的类类型 (特别之处) 究其原因,是因为非静态的成员函数必须被绑定到一个类的对象或者指针上,才能得到被调用对象的 this 指针,然后才能调用指针所指的成员函数(我们知道,所有类的对象都有自己数据成员的拷贝,但是成员函数都是共用的,为了区分是谁调用了成员函数,就必须有this指针,this指针是隐式的添加到函数参数列表里去的)。 明白了这点,接下来就简单了。 声明 :与普通函数作为区分,指向类的成员函数的指针只需要在指针前加上类类型即可,格式为: typedef 返回值 ( 类名:: *指针类型名)(参数列表);

C++类成员函数指针使用介绍

喜欢而已 提交于 2020-03-20 01:15:27
3 月,跳不动了?>>> 前言 在之前写过的博客中有介绍过函数指针和指针函数的区别和简单用法(文章在这里),当时的Demo非常简单,都是C语言的写法,但是当在C++中直接像C那样使用类成员函数指针时就会报错:reference to non-static member function must be called 所以如果是C++中的成员函数指针其使用方法是有区别的,这里针对不同的场景做个补充说明。 类成员函数的指针(非静态) 指向类成员函数的指针与普通函数指针的区别在于,前者需要匹配函数的参数类型和个数以及返回值类型,还要匹配该函数指针所属的类类型。 这是因为非静态的成员函数必须被绑定到一个类的对象或者指针上,才能得到被调用对象的this指针,然后才能调用指针所指的成员函数(所有类的对象都有自己数据成员的拷贝,但是成员函数都是共用的,为了区分是谁调用了成员函数,就必须有this指针,this指针是隐式的添加到函数参数列表里去的)。 所以,对于类成员函数的指针使用包含以下几个步骤: 声明: 指向类的成员函数的指针需要在指针前面加上类的类型,格式为: typedef 返回值 (类名::*指针类型名)(参数列表); 赋值: 需要用类的成员函数地址赋值,格式为: 指针类型名 指针名 = &类名::成员函数名; 1 注意:这里的这个&符号是比较重要的:不加&

Python 函数

点点圈 提交于 2020-03-19 02:57:52
一、函数是什么?   函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。   函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。 定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。 特性: 代码重用 保持一致性 可扩展性 二、函数的创建 2.1 格式: Python 定义函数使用 def 关键字,一般格式如下: def 函数名(参数列表): 函数体 def hello(): print('hello') hello()#调用 2.2 函数名的命名规则 : 函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合。不能使用任何的标点符号; 函数名是区分大小写的。 函数名不能是保留字。 2.3 形参和实参 形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参(实参个数,类型应与实参一一对应) 实参:实际参数

重叠I/O之事件通知

杀马特。学长 韩版系。学妹 提交于 2020-03-19 02:51:49
在 Winsock 中,重叠 I/O(Overlapped I/O)模型能达到更佳的系统性能,高于select模型、异步选择和事件选择三种。重叠模型的基本设计原理便是让应用程序使 用一个重叠的数据结构(WSAOVERLAPPED),一次投递一个或多个 Winsock I/O 请求。针对这些提交的请求,在它们完成之后,我们的应用程序会收到通知,于是 我们就可以对数据进行处理了。 要想在一个套接字上使用重叠 I/O 模型,首先必须使用 WSA_FLAG_OVERLAPPED 这个标志,创建一个套接字。例如: SOCKET s = WSASocket(AF_INET, SOCK_STREAM, 0, NULL, 0, WSA_FLAG_OVERLAPPED); 注:创建套接字的时候,假如使用的是 socket 函数,那么会默认设置 WSA_FLAG_OVERLAPPED 标志。 成功建好一个套接字,同时将其与一个本地接口绑定到一起后,便可开始进行重叠 I/O 操作,为了要使用重叠结构,我们常用的 send、recv 等收发数据的函数也都要 被 WSASend、WSARecv 替换掉了,方法是调用下述的 Winsock 函数,同时指定一个 WSAOVERLAPPED 结构(可选): WSASend() WSASendTo() WSARecv() WSARecvFrom() WSAIoctl

C++友元函数

偶尔善良 提交于 2020-03-18 22:04:35
友元函数的基本概念 1、概念:可以在类A中通过关键字 friend 声明或定义 某个独立函数 或 另一个类B的某个成员函数 或 另一个类B 为类A的 友元函数 ,友元函数可以 无限制 的存取类A的成员(包括私有、公有和保护成员)。 2、定义形式:friend 函数类型 函数所在类名::函数名(参数列表); 3、友元函数可在类中的私有或公有部分通过关键字friend说明或定义,但如在类中声明,而在类外定义,就不能再在类外使用friend关键字。友元函数作用域的开始点在它的说明点,结束点和类的作用域相同。 4、友元函数应被看作类的接口的一部分,使用它的主要目的是提高效率,因为它可以直接访问对象的私有成员,从而省去调用类的相应成员函数的开销。友元函数的另一个优点是:类的设计者不必在考虑好该类的各种可能使用情况之后再设计这个类,而是可以根据需要,通过使用友元来增加类的接口。 一、类外的独立函数作为类的友元函数 类外的独立函数作为类的友元函数,这个独立函数其实就是一个普通的函数,仅有的不同点是:它在类中被说明为类的友元函数,可以访问该类所有对象的私有成员。 【例1】使用友元函数计算两点距离的例子 #include <iostream> #include <cmath> using namespace std; class Point {   private:    double X,Y;