成员变量

C++ Primer Summary 02

孤人 提交于 2020-03-30 16:12:29
标识符:变量名,即变量的标识符;C++中的标识符都是大小写敏感的。 初始化:复制初始化和直接初始化。直接初始化效率更高。 初始化不是赋值:初始化既创建变量又赋初始值,赋值则是擦除对象的当前值并用新值代替。 系统有时候会帮我们初始化变量,系统提供什么样的值取决于变量的类型以及定义的位置。 未初始化的变量引起运行问题:可能会导致程序错误执行和/或错误计算,问题出在未初始化的变量事实上都有一个值,编译器指定变量的内存地址,该地址原有数值依然存在。建议每个内置类型的对象都要初始化。 声明和定义:声明用于向程序表明变量的类型和名字。定义也是声明。但声明不是定义。可以使用extern声明变量。 extern int i;//declares but not define i int i;//declares and define i extern double i = 0;//definition C++语言中,变量必须且仅能定义一次。 变量名相同,在局部作用域中局部变量会屏蔽全局变量。 函数外部的名字具有全局作用域。类作用域、命名空间作用域、语句作用域、局部作用域。 const限定符把一个对象转换成一个常量,定义const对象时必须初始化。 const对象默认为文件的局部变量。与其他变量不同,除非特别说明,在全局作用域声明的const变量是定义该对象的文件的局部变量。此变量只存在于那个文件钟

C++中结构体的的慨念和使用方法

时光总嘲笑我的痴心妄想 提交于 2020-03-30 16:02:39
什么是结构体?   简单的来说,结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型,第二相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以做为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。   定义结构体使用struct修饰符,例如: C++ 代码 struct test {  float a;  int b; };   上面的代码就定义了一个名为test的结构体,它的数据类型就是test,它包含两个成员a和b,成员a的数据类型为浮点型,成员b的数据类型为整型。   由于结构体本身就是自定义的数据类型,定义结构体变量的方法和定义普通变量的方法一样。 test pn1;   这样就定义了一test结构体数据类型的结构体变量pn1,结构体成员的访问通过点操作符进行, pn1.a=10 就对结构体变量pn1的成员a进行了赋值操作,   注意:结构体生命的时候本身不占用任何内存空间,只有当你用你定义的结构体类型定义结构体变量的时候计算机才会分配内存。   结构体,同样是可以定义指针的,那么结构体指针就叫做结构指针。   结构指针通过-

C++类内存分布

房东的猫 提交于 2020-03-30 02:39:27
转自:http://www.cnblogs.com/jerry19880126/p/3616999.html C++类内存分布 书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。 工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来: 先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如果写上/d1 reportSingleClassLayoutXXX(XXX为类名),则只会打出指定类XXX的内存布局。近期的VS版本都支持这样配置。 下面可以定义一个类,像下面这样: 1 class Base 2 { 3 int a; 4 int b; 5 public: 6 void CommonFunction(); 7 }; 然后编译一下,可以看到输出框里面有这样的排布: 这里不想花精力在内存对齐因素上,所以成员变量都设为int型。 从这里可以看到普通类的排布方式,成员变量依据声明的顺序进行排列(类内偏移为0开始),成员函数不占内存空间。 再看下继承,往后面添加如下代码: 1 class DerivedClass: public Base 2 { 3 int c; 4 public

Java------数据和表达式

一笑奈何 提交于 2020-03-28 11:01:18
一、基本语法元素 什么是语句?什么是块? 语句是java程序执行最小的单位,程序的各语句间以 " ; " 分隔. 大括号" { } "包含的一系列的语句称为语句块,简称为块,语句块可以嵌套,一个语句块中可以有多个子语句块 ,从语法上看,块可以被看作以一个语句. 什么是注释? 注释可理解成为代码程序进行解释说明,提高程序的可读性.且注释不影响程序的执行结果,编译器会忽略注释. 但是注释也有规范:注释不能随意的插在一个标识符或关键字之中,要保证程序中最基本元素的完整性,所以注释最好在程序段的空白处插入 . 注释 3 种形式: // 在一行内的注释 -----> 一般用于对声明的变量、一行程序的作用做解释说明 /* 一行或多行的注释 */ -----> 多用于说明方法的功能、设计逻辑、基本思想 /** 文档注释 */ 什么是标识符? 标识符是由字母、数字、下划线(_)、或美元符($)组成的字符串,其中 数字不能作表示符的开头 ,且标识符要 区分大小写. 标识符可用作变量名、方法名、接口名、类名. For example: Username username UserName 根据标识符区分大小写的原则可以得出 此三种标识符为不同的标识符. 对于各类名的命名规则: 类名或接口名:多为名词,每个单词的首字母都要大写: UserName; 方法名:多为动词,含有大小写,首字母小写

成员变量和局部变量有什么区别?

此生再无相见时 提交于 2020-03-25 15:00:34
3 月,跳不动了?>>> FAQ2.13 成员变量和局部变量有什么区别? class A { int a;// 成员变量 public static void main(String[] args) { int b;// 局部变量 } } ———————————————————————————————————————————————————————————————————————————————————————— 类体由 2 部分构成 : 一部分是变量的定义 ; 一部分是方法的定义 ( 一个类中可以有多个方法 ) 在变量定义部分定义的变量叫做类的成员变量 , 成员变量在整个类中都有效 . ( 全局变量应该是成员变量的俗称 ) 在方法体中定义的变量叫做局部变量 , 局部变量只在定义它的方法中有效 . 成员变量又分为 实例变量 和 类变量 (static 静态变量 ). class One { float x; //x 为实例变量 static int y; // 只要有关键字 static,y 为类变量 } ———————————————————————————————————————————————————————————————————————————————————————— 1. 成员变量可以被 public , protect , private , static

Java局部变量与成员变量

白昼怎懂夜的黑 提交于 2020-03-25 15:00:15
3 月,跳不动了?>>> java局部变量与成员变量: 在Java中,局部变量必须初始化;成员变量可以不用初始化,系统自动初始化。 class A { int a;//成员变量 public static void main(String[] args) { int b;//局部变量 } } 区别: 1.成员变量在类中,局部变量在方法中 2.声明成员变量时可以不初始化(被final修饰且没有static的必须显式赋值),而局部变量必须手动初始化 3.成员变量可以被public,protect,private,static等修饰符修饰,而局部变量不能被控制修饰符及static修饰;两者都可 以定义成final型 4.成员变量存储在堆,局部变量存储在栈 5.存在时间不同 类变量、实例变量、局部变量 类变量是类中独立于方法之外的变量,用static 修饰。 实例变量也是类中独立于方法之外的变量,不过没有static修饰。 局部变量是类的方法中的变量。 看下面的伪代码说明: Java代码 public class Variable{ static int allClicks=0;//类变量 String str="hello world";//实例变量 public void method(){ int i =0;//局部变量 } } 实例变量也称为:“域”,“成员变量”

成员变量和局部变量

元气小坏坏 提交于 2020-03-25 14:40:48
3 月,跳不动了?>>> 成员变量( 存在于堆内存中,和类一起创建 )和局部变量( 存在于栈内存中,当方法执行完成,让出内存,让其他方法来使用内存 )。 区别 1、在类中的位置不同 成员变量:在类中方法外面 局部变量:在方法或者代码块中,或者方法的声明上(即在参数列表中) 2、在内存中的位置不同,可以看看 Java程序内存的简单分析 成员变量:在堆中(方法区中的静态区) 局部变量:在栈中 3、生命周期不同 成员变量:随着对象的创建而存在,随着对象的消失而消失 局部变量:随着方法的调用或者代码块的执行而存在,随着方法的调用完毕或者代码块的执行完毕而消失 4、初始值 成员变量:有默认初始值,java会给她一个初始值:基本数据类型是0,应用数据类型是null 局部变量:没有默认初始值,使用之前需要赋值,否则编译器会报错(The local variable xxx may not have been initialized) 局部变量的优先级高于成员变量 public class myTest3 { String name = "成员变量"; public static void main(String[] args) { new myTest3().show(); } public void show() { //局部变量优先级比成员变量高 String name = "局部变量";

JavaSE复习日记 : 多态

时光毁灭记忆、已成空白 提交于 2020-03-24 11:36:22
/** * 里氏替换原则 : * 能使用父类的地方,一定可以使用子类 * 什么是多态 : * 父类的引用,指向子类的对象 * 多态的前提条件 : * 有继承关系的两个类 * 多态的目的 : * ☆☆☆ 代码的重用 * 多态发什么在什么时候 : * 赋值的时候 * * !!!!!!!!! 多态中的 ☆☆☆ 覆写 是特指的 成员方法!!!!!!!!! * 什么是覆写 : * 就是在子类有个和父类相同的方法 : 方法名 , 参数列表 , 返回值类型 (和修饰符列表没关系) * 1 方法名相同 : 不相同,就是两个不一样的方法了 不是覆写 * 2 参数列表相同 : 参数列表不同,就是方法的重载了,也不是覆写 * 参数列表的 个数 和 数据类型 都相同 才叫相同吧 * 3 返回值类型相同 ; 返回值代表函数(方法)的功能,覆写是为了功能更强大,不能降低功能,所以必须相同 * 覆写之后 不能比原有的方法有更低的访问权限 ( 权限的降低 就意味着 功能的降低 ) * 覆写之后 不能比原有的方法有更宽泛的异常 ( 只能异常越来越低 ) * *!!!!! ☆☆☆ 父类的属性列表是在编译的时候就生成了 : 就是javac的时候☆☆☆ *!!!!! ☆☆☆ 子类的属性列表是在运行时才生成 : 就是java运行的时候☆☆☆ * * 父类和子类的调用有两种形式 : * 1 多态 父类引用指向子类的对象

OC 成员变量作用域

a 夏天 提交于 2020-03-22 19:23:44
1. 成员变量作用域: @public :在任何地方都能直接访问对象的成员变量。 @private :只能在当前类的对象方法中直接访问。(@implementation中默认是@private) @protected :可以在当前类及其子类的对象方法中直接访问。(@interface中默认是@protected) @package :只要处在同一框架中就能直接访问对象的成员变量。介于private和public之间。 @interface和@implementation中不能声明同名的成员变量。 2. @implementation里面也可定义成员变量,默认权限是private 来源: https://www.cnblogs.com/wahy/p/5368152.html

oc82--成员变量使用copy修饰

余生颓废 提交于 2020-03-22 19:22:40
// // Person.h #import <Foundation/Foundation.h> typedef void (^myBlock)(); @interface Person : NSObject //@property (nonatomic, retain) NSString *name; @property (nonatomic, copy) NSString *name; // 注意: 如果是block使用copy并不是拷贝, 将pBlock所指向的代码块从栈转移到堆中。block在堆中,使用外界对象的时候,会对外界对象的计数器加1, @property (nonatomic, copy) myBlock pBlock; //@property (nonatomic, retain) myBlock pBlock; @end // // Person.m #import "Person.h" @implementation Person - (void)dealloc { // 由于block使用外界对象会对里面的对象加1,因此要在Person释放的时候把里面使用的对象也释放。 // 只要给block发送一条release消息, block中使用到的对象d也会收到该消息。 Block_release(_pBlock); NSLog(@"%s", __func__)