成员变量

c博客作业06-结构体&文件

帅比萌擦擦* 提交于 2019-12-15 21:14:06
1.本章学习总结 1.1 学习内容总结 1.结构体如何定义、成员如何赋值 1.结构体的定义 一般形式: struct 结构名{ 类型名 结构名成员1; 类型名 结构名成员2' ··· 类型名 结构名成员n; }; 结构的嵌套定义: /*设置结构体保存学生的学号,姓名,通行地址,以及计算机,英语,数学和平均成绩,其中通行地址包括,居住的城市,街道,门牌号,邮编*/ struct address { char city[10]; char street[20]; int code; int zip; }; struct nest_student{ int num; char name[10]; struct address addr; int computer,english,math; double auerage; }; 注意:在注意嵌套的结构类型时,必须先定义成员的结构类型,在定义主结构类型。 2.结构体成员的赋值 在c语言中,使用结构成员操作符"."来引用结构成员,格式为 结构变量名.结构成员名 。 /*对学生的信息进行赋值*/ struct student{ int num; char name[10]; int computer,english,math; double average; }; struct student s1,s2; /*分别对s1的每个结构体成员赋值;

Java—(多态、内部类)

我与影子孤独终老i 提交于 2019-12-15 20:14:09
一、多态 多态:可以理解为同一个事物在不同的场合具有不同的形态 分为两种: 编译时多态:在编译期间编译器根据函数实参的类型确定要调哪个函数(这个我们之前已经接触过了,和函数重载差不多,是同名函数,但是参数不同)编译时的多态性是通过函数重载或运算符重载来实现的。 运行时多态:在程序运行期间才会去判断到底会调用哪个函数。这里我们主要讲的就是动态多态。运行时的多态性是通过虚函数与基类指针共同作用实现的。 作用: 静态多态的作用:减少了名字(比如:函数名)的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。 动态多态的作用:多态技术允许将基类指针或基类引用指向子类对象,根据对象的动态类型来决定调用的是哪个子类中的这个同名方法,从而解决了同名覆盖问题,写出了通用的代码,即扩展性优秀的代码,以适应需求的不断变化。 简单举个例子: 猫 x=new 猫(); 动物 y=new 猫(); 1.多态的体现 父类的引用指向自己的子类对象; 父类的引用也可以接收自己的子类对象。 2.多态的前提 必须是类与类之间的关系,要么是继承(extends),要么是实现(implements),通常还有一个前提,就是存在覆盖(重写)。 3.多态的好处 多态的出现大大的提高了程序的可扩展性。但是只能使用父类的引用,访问父类的成员。 4.类型转换(向上转型,向下转型) Anmial a=new Cat();/

c++类内存分布

两盒软妹~` 提交于 2019-12-14 19:07:17
我们来看看编译器是怎么处理类成员内存分布的,特别是在继承、虚函数存在的情况下。 工欲善其事,必先利其器,我们先用好Visual Studio工具,像下面这样一步一步来: 先选择左侧的C/C+±>命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存布局,如果写上/d1 reportSingleClassLayoutXXX(XXX为类名),则只会打出指定类XXX的内存布局。近期的VS版本都支持这样配置。 class Base { int a ; int b ; public : void CommonFunction ( ) ; } ; 然后编译一下,可以看到输出框里面有这样的排布: 这里不想花精力在内存对齐因素上,所以成员变量都设为int型。 从这里可以看到普通类的排布方式,成员变量依据声明的顺序进行排列(类内偏移为0开始),成员函数不占内存空间。 再看下继承,往后面添加如下代码 class DerivedClass : public Base { int c ; public : void DerivedCommonFunction ( ) ; } ; 编译,然后看到如下的内存分布(父类的内存分布不变,这里只讨论子类成员变量的内存分布): 可以看到子类继承了父类的成员变量,在内存排布上,先是排布了父类的成员变量

java之类的属性和方法

こ雲淡風輕ζ 提交于 2019-12-14 16:02:42
类的语法格式 public class Person{ //属性类的成员变量可以先声明,不用初始化,类成员变量具有初始值 String name; int age; //方法 public void showName(){ System.out.println("姓名:"+name); } public int getAge(){ return age; } } 类的实例化: public class Person{ //属性类的成员变量可以先声明,不用初始化,类成员变量具有初始值 String name; int age; //方法 public void showName(){ System.out.println("姓名:"+name); } public int getAge(){ return age; } public static void main(String[] args) { Person person = new Person(); person.name = "tom"; person.age = 12; person.showName(); int age = person.getAge(); System.out.println("年龄:"+age); } } 类的成员之一: 属性 语法格式: 修饰名类型 属性名=初值 说明: 修饰符private

java 面向对象1

五迷三道 提交于 2019-12-14 06:21:48
成员属性在代码中的体现就是成员变量 成员功能在代码中的体现就是成员方法 变量的定义方式,和位置,以及现在定义类中属性的特点。总结下面几点异同 区别一:定义的位置不同 定义在类中的变量是成员变量 定义在方法中或者{}语句里面的变量是局部变量 区别二:在内存中的位置不同 成员变量存储在对内存的对象中 局部变量存储在栈内存的方法中 区别三:声明周期不同 成员变量随着对象的出现而出现在堆中,随着对象的消失而从堆中消失 局部变量随着方法的运行而出现在栈中,随着方法的弹栈而消失 区别四:初始化不同 成员变量因为在堆内存中,所有默认的初始化值 局部变量没有默认的初始化值,必须手动的给其赋值才可以使用。 类与对象 类,用于描述多个对象的共同特征,它是对象的模板。 对象,用于描述现实中的个体,它是类的实例。 类的定义:使用关键字class来定义java中的类 格式: class 类名 { //属性 数据类型 变量名; … //方法 修饰符 返回值类型 方法名(参数){ } … } 创建对象: 格式: 类名 对象名 = new 类名(); 封装(private关键字) 封装,把对象的属性与方法的实现细节隐藏,仅对外提供一些公共的访问方式 封装的体现: 变量:使用 private 修饰,这就是变量的封装 方法:也是一种封装,封装了多条代码 类: 也是一种封装,封装了多个方法 private关键字

java反射与代理

为君一笑 提交于 2019-12-14 06:19:37
反射:框架设计的灵魂 一、反射概念 1.1 框架 半成品软件。可以在框架的基础上进行软件开发,简化编码。学习框架并不需要了解反射,但是要是想自己写一个框架,那么就要对反射机制有很深入的了解。 1.2 反射 反射机制:将类的各个组成部分封装为其他对象,这就是反射机制。 反射的好处: 1.可以在程序运行过程中,操作这些对象。 2.可以解耦,提高程序的可扩展性。 Java代码在计算机中经历的三个阶段 (1)Source源代码阶段: .java被编译成 .class字节码文件。 (2)Class类对象阶段: .class字节码文件被类加载器加载进内存,并将其封装成Class对象(用于在内存中描述字节码文件),Class对象将原字节码文件中的成员变量抽取出来封装成数组Field[],将原字节码文件中的构造函数抽取出来封装成数组Construction[],在将成员方法封装成Method[]。当然Class类内不止这三个,还封装了很多,我们常用的就这三个。 (3)RunTime运行时阶段:创建对象的过程new。 二、获取Class对象的方式 2.1 获取Class对象的三种方式对应着java代码在计算机中的三个阶段 (1)【Source源代码阶段】 Class.forName(“全类名”):将字节码文件加载进内存,返回Class对象 * 多用于配置文件,将类名定义在配置文件中。读取文件,加载类

C语言中volatile关键字的使用

こ雲淡風輕ζ 提交于 2019-12-13 12:56:44
volatile是一个类型修饰符(type specifier),就像我们熟悉的const一样,它是被设计用来修饰被不同线程访问和修改的变量;volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。 volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。 作用 编辑 简单地说就是防止编译器对代码进行优化。比如如下程序: 1XBYTE[2]=0x55; 2XBYTE[2]=0x56; 3XBYTE[2]=0x57; 4XBYTE[2]=0x58; 对外部硬件而言,上述四条语句分别表示不同的操作,会产生四种不同的动作,但是编译器却会对上述四条语句进行优化,认为只有XBYTE[2]=0x58(即忽略前三条语句,只产生一条机器代码)。如果键入volatile,则编译器会逐一地进行编译并产生相应的机器代码(产生四条代码)。 例子 编辑 精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子: 1)并行设备的硬件寄存器(如:状态寄存器) 2)一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 3)多线程应用中被几个任务共享的变量 这是区分C程序员和嵌入式系统程序员的最基本的问题

lombok注解

余生颓废 提交于 2019-12-12 14:55:25
lombok注解文档 lombok官网下载 lombok介绍 lombok可以通过简单的注解的形式来帮助我们简化和消除一些必须有但显得很臃肿的Java代码,比如常见的Getter&Setter、toString()、构造函数等等。lombok不仅方便编写,同时也让我们的代码更简洁。 lombok提供了一个功能完整的jar包,可以很方便的与我们的项目进行集成。 maven依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.20</version> <scope>provided</scope> </dependency> lombok是一个可以帮助我们简化java代码编写的工具类,尤其是简化javabean的编写,即通过采用注解的方式,消除代码中的构造方法,getter/setter等代码,使我们写的类更加简洁,当然,这带来的副作用就是不易阅读…不过,还是能看得懂吧,废话不多说,先看一下lombok支持的一些常见的注解。 1.@NonNull 2.@Cleanup 3.@Getter/@Setter 4.@ToString 5.@EqualsAndHashCode 6.@NoArgsConstructor/

关于对象

我与影子孤独终老i 提交于 2019-12-12 00:17:24
对象的产生   当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值,除了基本数据类型之外的变量类型都是引用型。 匿名对象   在创建对象时只有new 和 类名,不将new 出来的值赋给对象名,而是直接调用这个对象的方法。   例如:new Person().shout();   使用情况   如果对一个对象只需要进行一次方法调用,那么就可以使用匿名对象。   经常使用匿名对象作为实参传递给一个方法调用。 类的访问机制:   在一个类中的访问机制:类中的方法可以直接访问类中的成员变量。但是static方法访问非static的成员变量,编译不会通过。       来源: https://www.cnblogs.com/fangfangfanga/p/12025347.html

面向对象程序设计

我只是一个虾纸丫 提交于 2019-12-11 00:45:51
1、交通工具类(vehicle) 成员变量: 类型(vType) String类型 如: 小型车、大型车 载客人数(vNum) int类型 如: 20 构造方法: 构造方法(1),输出“创建了一个交通工具”; 构造方法(2),调用构造方法(1),并通过形参初始化类型(vType)和载客人数(vNum); 普通方法: 设置get和set方法用于获取和设置类中各个变量的值; 重写Equals方法,当且仅当类型(vType)和载客人数(vNum) 均相等时,即为同一交通工具。 重写toString方法,返回类型(vType)和载客人数(vNum)的信息 样式如下:类型:小型车,载客人数:20 2、计费接口(Charge) 成员方法: billingMethods( ),用于输出不同类型交通工具的不同计费方式,如: 公交车计费方式: 一元 / 张(不计公里数) 3、公交车类(Bus) 继承vehicle类 实现Charge接口 成员变量: 线路号(bNo) String类型 如:5路、4路 线路(line) String类型 如:科技学院—火车站 构造方法: 先调用父类构造方法(2)初始化类型(vType)和载客人数(vNum),再初始化线路号(bNo)和线路(line)。 普通方法: 重写billingMethods( )方法。 定义showBus()方法,用于输出Bus对象的所有信息