成员变量

Category VS Extension 原理详解

橙三吉。 提交于 2020-02-04 00:15:49
(一)Category 1、什么是Category? category是Objective-C 2.0之后添加的语言特性,别人口中的分类、类别其实都是指的category。category的主要作用是为已经存在的类添加方法。除此之外,apple还推荐了category的另外两个使用场景。 可以把类的实现分开在几个不同的文件里面。这样做有几个显而易见的好处。 可以减少单个文件的体积 可以把不同的功能组织到不同的category里 可以由多个开发者共同完成一个类 可以按需加载想要的category 声明私有方法 apple 的SDK中就大面积的使用了category这一特性。比如UIKit中的UIView。apple把不同的功能API进行了分类,这些分类包括UIViewGeometry、UIViewHierarchy、UIViewRendering等。 不过除了apple推荐的使用场景,广大开发者脑洞大开,还衍生出了category的其他几个使用场景: 模拟多继承(另外可以模拟多继承的还有protocol) 把framework的私有方法公开 2、category特点 category只能给某个已有的类扩充方法,不能扩充成员变量。 category中也可以添加属性,只不过@property只会生成setter和getter的声明,不会生成setter和getter的实现以及成员变量。

Python查看模块(变量、函数、类)方法

百般思念 提交于 2020-02-03 04:03:23
查看模块成员:dir()函数 通过 dir() 函数,我们可以查看某指定模块包含的全部成员(包括变量、函数和类)。注意这里所指的全部成员,不仅包含可供我们调用的模块成员,还包含所有名称以双下划线“__”开头和结尾的成员,而这些“特殊”命名的成员,是为了在本模块中使用的,并不希望被其它文件调用。 这里以导入 string 模块为例,string 模块包含操作字符串相关的大量方法,下面通过 dir() 函数查看该模块中包含哪些成员: import string print(dir(string)) 程序执行结果为: ['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_re', '_string', 'ascii_letters', 'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 'octdigits', 'printable', 'punctuation', 'whitespace']

类成员函数参数和类成员变量的可见性

痞子三分冷 提交于 2020-02-03 00:10:06
类成员函数参数和类成员变量的可见性 一、如下示例 #include "iostream" using namespace std; class point{ public: int x; int y; point() {} point(int a,int b){x=a;y=b;} void output() { cout<<x<<endl<<y<<endl; } void input(int a,int y) { x=a; y=y; } }; int main() { point pt(5,5); pt.input(10,10); pt.output(); return 1; } 二、问题 输出结果为10,5。不是我们10,10,为什么呢? 因为相对局部变量隐藏了外层局部变量的缘故。在 void input(int a,int y) { x=a; y=y; } 函数中,类的成员变量y被形参y所屏蔽隐藏,所以实际上是自己给自己赋值。 三、解决方法两个: 1、void input(int a,int b) { x=a; y=b; } 2、用this指定 void input(int x,int y) { this.x=x; this.y=y; } 来源: CSDN 作者: hopegrace 链接: https://blog.csdn.net/hopegrace/article

Java基础——类和对象

﹥>﹥吖頭↗ 提交于 2020-02-01 20:00:23
Java基础——类和对象 类和对象 类的定义:一组相关属性和行为的集合,是Java中 最基本 的单位。 类中包括 成员变量 (事物的属性)和 成员方法 (事物的行为)。 定义类就是定义类中的成员(成员变量和成员方法)。 对象的定义:该类事物中的具体体现。 对象的使用 创建对象并使用 格式:类名 对象名 = new 类名(); 注意事项:对象名为合法的标识符,若为一个单词,则所有字母小写,若为多个单词,则从第二个单词开始首字母大写。 使用成员变量 格式:对象名.变量名; 使用成员方法 格式:对象名.方法名(参数); 成员变量和局部变量的区别 在类中的位置不同 成员变量在类中,方法外。 局部变量在方法定义中或方法声明上。 在内存中位置不同 成员变量在 堆内存 ,属于对象。 局部变量在 栈内存 ,属于方法。 生命周期不同 成员变量随着 对象 创建而存在,随着对象消失而消失。 局部变量随着 方法调用 而存在,随着方法调用结束而消失。 初始化值不同 成员变量有默认初始化值。 局部变量没有默认的初始化值,必须定义,赋值然后使用。 注意事项 局部变量名称可以和成员变量名称一样,在方法使用时采取 就近原则 。 基本数据类型变量: byte short int long float double boolean char 。 引用数据类型变量: 数组 类 接口 枚举 。 来源: CSDN 作者:

C语言之结构体

喜你入骨 提交于 2020-02-01 03:56:21
概念 结构体是一种构造类型,由若干个成员组成,成员可以是基本数据类型,或是另一个结构体 声明结构体 struct 结构体名 { 成员列表 }; 结构体名表示结构的类型名。 声明一个结构体表示创建一种新的类型名(自定义数据类型),然后用类型名定义变量。 struct Product { char name[10]; char shape[10]; char color[10]; float price; } 使用结构体定义变量有三种方式 第一种:声明结构体类型,再定义变量 struct Product p1; struct Product p2; p1和p2是结构体变量名,这两个变量具有相同的结构 类比: 类型名 变量名 int a; | | struct Product p; struct Product整体表示一种数据类型 定义结构体变量后,系统会为其分配内存单元 第二种:声明结构体类型时,同时定义变量(可以定义多个变量) struct 结构体名 { 成员列表 } 变量名列表; example: struct Product { char name[10]; char shape[10]; char color[10]; float price; } p1, p2; 第三种:直接定义结构体类型变量(匿名结构体,没有结构体名称) struct { 成员列表 } 成员变量;

JAVA OOP面向对象

一个人想着一个人 提交于 2020-01-31 23:18:27
JAVA OOP 面向对象开发 不断地创建对象、使用对象、指挥对象做事情 面向对象设计 管理和维护对象之间的关系 面向对象特征 封装、多态、继承 1、类与对象 描述一个事物 属性:该事物的描述信息 --------------------->成员变量 行为:该事物能够做什么 ---------------------->成员方法 类: 是一组相关的属性和行为的集合,抽象的概念 对象:该类事物的具体表现形式 举例: 学生:类 班长:对象 如何用类中方法?(创建对象使用) 格式:类名 对象名 = new 对象名(); 如何使用成员变量? 对象名.变量名 如何使用成员方法? 对象名.方法名(…) public class StudentDemo { public static void main ( String [ ] args ) { student s = new student ( ) ; s . name = "十七" ; s . age = 18 ; s . address = "永川" ; System . out . println ( s . name + "....." + s . address + "....." + s . age ) ; s . study ( ) ; s . eat ( ) ; } } class student { //姓名 String

封装

丶灬走出姿态 提交于 2020-01-31 22:31:45
3、封装 概述: 隐藏对象的属性的实现细节,仅对外提供公共访问方式 案例: ​ 使用这个案例中 发现了一个问题,通过成员变量可以赋值一些非法的数据。 ​ 赋值前应先进行判断。判断在哪里做比较合适呢? 判断应该定义在student类中,而我们在成员变量的位置不能判断。因为做数据校验,必须要依靠逻辑语句。逻辑语句应该定义在方法中。最终决定在student类中提供一个方法校验。 public void setAge ( int a ) { if ( a < 0 || age > 120 ) { System . out . println ( "你给的年龄有问题" ) ; } else { age = a ; } } 我们给出了方法进行校验,但是,它不用方法,还是直接赋值了。方法就没有起到作用。 就应该要求它必须使用方法 // 创建学生对象 Student s = new Student ( ) ; // 给成员变量赋值 s . setAge ( 18 ) ; s . name = "周十七" ; s . show ( ) ; s . age = - 17 ; s . show ( ) ; } 怎么强制使用方法,不走成员变量? private:关键字可以修饰成员变量和成员方法 注意:被private修饰的成员只能在本类中访问。 private int age ; public class

C++笔记3

流过昼夜 提交于 2020-01-31 12:24:55
今天的第一部分内容先是了解了几个知识点。如下: ①内联函数 内联函数是将整个函数的代码插入到调用语句处,这样就不会产生调用函数的语句。 exp. inline int Max(int a,int b) { if(a>b) return a; return b; } ②函数重载 一个或多个的函数名字相同,但是参数的个数或参数类型不同。 exp. int Max(double f1,double f2){}(1) int Max(int n1,int n2){}(2) int Max(int n1,int n2,int n3){}(3) Max(3.4,2.5);//调用(1) Max(2,4);//调用(2) Max(3,2.4)//ERROR 这样一来函数命名变得简单了,编译器可以通过调用语句中的实参的个数和类型判断该调用哪个函数。 ③函数的缺省参数 定义函数时可以让最右边的连续若干个参数有缺省值。 exp. void fun(int x1,int x2=2,int x3=3){} fun(10);//等效于 fun(10,2,3) fun(10,,8)//不行,只能最右边连续若干个参数缺省。 类和对象 面向对象的程序=类+类...+类 设计程序的过程就是设计类的过程 1.从客观事物抽象出类 exp.输入矩形长宽,求出面积和周长。 将长宽变量以及设置长宽、求面积

定义和使用结构体变量

雨燕双飞 提交于 2020-01-31 08:37:12
一、自己建立结构体类型 1.C语言中允许用户自己建立由不同类型数据组成的组合型的数据结构,它成为结构体。 2.一般形式 struct 结构体名 { 成员列表 } ; 3.结构体类型的名字是由一个关键字struct和结构体名组成而成的。 4.花括号内是该结构体所包含的子项,成为结构体的成员。 5.对各个成员都应该进行类型声明,即:类型名 成员名。成员表列也称为域表,每一个成员是结构体中的一个域。 6.成员命名规则与变量名相同。 二、定义结构体类型变量 1.先声明结构体类型,在定义该类型的变量 (1)在定义了结构体变量后,系统会为之分配内存单元。 (2)这种声明方式是声明类型和定义变量分离,在声明类型后可以随时定义变量。 2.在声明类型的同时定义变量 (1)一般形式 struct 结构体名 { 成员表列 } 变量名表列 ; (2)声明类型和定义变量放在一起进行,能直接看到结构体的结构。 3.不指定类型名而直接定义结构体类型变量 (1)一般形式 struct { 成员表列 } 变量名表列 ; (2)制定了一个无名的结构体类型,没有名字,就不能再以此结构体类型去定义其他变量。 4.结构体类型与结构体变量是不同的概念。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。 5.结构体类型中成员名可以和程序中的变量名相同,但二者不代表同一对象。 6.对结构体变量中的成员,可以单独使用

final成员变量与final局部变量

风格不统一 提交于 2020-01-31 05:22:32
final修饰符 final关键字可以修饰类、变量和方法 final修饰的变量,一旦该变量被赋予初始值,以后则不能改变(即获得初始值之后不能被重新赋值);final可以修饰成员变量(实际变量、类变量)、局部变量、形参。 final成员变量 final修饰的成员变量必须由程序员显示的指定初始值; final修饰的类变量:必须在静态初始化块中指定初始值或声明该变量时指定初始值,并且只能在其中一个地方指定; final修饰的实例变量:必须在非静态初始化块中、声明该实例变量的地方和构造器中指定初始值,并且只能在其中一个地方指定; 注:final修饰的实例变量不能在静态初始化中指定初始值,因为静态初始化是静态成员,不能访问非静态成员(实例变量);类变量不能在普通代码块中指定初始值,因为类变量在类初始化阶段已经被初始化,所以在普通代码块中不能被重新赋值。 eg: public class FinalVariableTest { //定义成员变量时指定默认值 final int a = 5 ; //以下变量将在构造器或代码块中分配初始值 final String str ; final int c ; final static double d ; //既没有在普通代码块中、构造器中,也没有在声明时指定初始值的实例变量也不能在普通方法中指定初始值 final char ch ; //初始化块