类对象

C++ 中的运算符重载

我的梦境 提交于 2019-12-17 15:36:19
所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能。 运算符也可以重载 ..运算符重载是对已有的运算符赋予多重含义... // 也就是说重载完之后,会根据我们定义的重载函数 自动调用最符合调用的方法使用...比如我们定义的类的重载运算符+. 当我们使用类的对象相加时,会自动调用我们定义的重载...而当我们使用内置的+法运算,比如 int b=5+3; 那么这是还是调用内置的+法运算进行处理 .. C++中预定义的运算符其运算对象只能是基本数据类型,而不适用于用户自定义类型(如类). // 同上,内置的运算符 只能应用于内置的数据类型 ...比如 int char double .等等。 (一) C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。 // 就是说只能重载内置的 + - * / 等运算符,不能自己创造运算符计算。 。 (二) C++允许重载的运算符C++中绝大部分的运算符允许重载. 不能重载的运算符只有5个: (1) 成员访问运算符. (2) 作用域运算符∷ (3) 条件运算符?: (4) 成员指针运算符* (5) 编译预处理命令的开始符号# (三) 重载不能改变运算符运算对象(即操作数)的个数。 // 不能改变运算符运算对象, 比如+法运算符,那么它有两个操作数 ..当我们重载它的时候 也只能有两个操作数 。

黑马Java就业班学习day01

孤街醉人 提交于 2019-12-17 06:06:31
. 继承 1.1 继承的实现(掌握) 继承的概念 继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,以及追加属性和方法 实现继承的格式 继承通过extends实现 格式:class 子类 extends 父类 { } 举例:class Dog extends Animal { } 继承带来的好处 继承可以让类与类之间产生关系,子父类关系,产生子父类后,子类则可以使用父类中非私有的成员。 示例代码 public class Fu { public void show() { System.out.println(“show方法被调用”); } } public class Zi extends Fu { public void method() { System.out.println(“method方法被调用”); } } public class Demo { public static void main(String[] args) { //创建对象,调用方法 Fu f = new Fu(); f.show(); ​ Zi z = new Zi(); z.method(); z.show(); } } 1.2 继承的好处和弊端(理解) 继承好处 提高了代码的复用性(多个类相同的成员可以放到同一个类中) 提高了代码的维护性

7个常用的面向对象设计原则

£可爱£侵袭症+ 提交于 2019-12-17 01:03:23
1、单一职责原则 定义:一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中。(就一个类而言,应该仅有一个引起它变化的原因) 解释:在软件系统中,一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,相当于将这些职责耦合在一起,当其中一个职责变化时可能会影响其它职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中,即不同的变化原因封装在不同的类中,如果多个职责总是同时发生改变则可以将它们封装在同一个类中。单一职责原则是实现高内聚,低耦合的指导方针。 2、开闭原则 定义:软件实体应当对外扩展开放,对修改关闭 解释:在开闭原则的定义中,软件实体可以指一个软件模块,一个由多个类组成的局部结构或一个独立的类。开闭原则就是指软件实体应尽量在不修改原有代码的情况下进行扩展。为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。 3、里氏代换原则 定义:所有引用基类的地方必须能透明地使用其子类的对象 解释:里氏替换原则表明,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象,那么它不一定能使用基类对象。 举例:我喜欢动物,那我一定喜欢狗,因为狗是动物的子类;但是我喜欢狗,不能据此断定我喜欢所有动物(基类推子类成立,子类推基类不一定成立)

java基础-内部类

ぃ、小莉子 提交于 2019-12-15 06:53:17
1. 什么是内部类 将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称之为内部类,其他类称之为外部类。在描述事物的时候,若一个事物内部还包含其他可能包含的事物,这时,就可以使用内部类来进行描述。 我们在定义内部类的时候,就是一个正常定义类的过程,同样包含各种修饰符、继承与实现关系等,在内部类中可以直接访问外部类的所有成员 eg: class 汽车 { // 外部类 class 发动机 { //内部类 } } 2. 内部类的分类 内部类可分为:成员内部类、局部内部类 成员内部类 什么是成员内部类? 成员内部类,定义在外部类中的成员位置,与类中的成员变量相似,可以通过外部类对象进行访问 定义格式 class 外部类 { 修饰符 class 内部类 { //XXX } } 访问方式 外部类名.内部类名 变量名 = new 外部类名().new 内部类名(); 举个栗子: //定义类 class Body { //外部类,身体 private boolean life = true ; //生命状态 public class Heart { //内部类,心脏 public void jump ( ) { System . out . println ( "心脏噗通噗通的跳" ) System . out . println ( "生命状态" + life

c++ 中的重载全局new,delete

馋奶兔 提交于 2019-12-13 14:39:38
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 最近做一个小项目,对c++又有很多新的理解。实在不的不让人发出感叹,c++太强大了,绝对不是一朝一夕就可以领悟她的内涵的。 首先我们要清楚,为什么我们要重载new,和delete了?这还不是指针造成的,确实指针是一件让人喜欢的东西,用起来如此让人喜欢,让人顺手。然而小程序我们完全可以避免内存泄露问题,大程序就不那么容易了,然而我们有一种特别好的方法可以跟踪我们new,和delete动作,找到未被释放的内存。办法是什么呢?微软给我们提供了一种很好的方法,那就是重载new,和delete。 在实现之前我们要清楚new,和delete的工作机理,这是个多么好的学习机会啊! 对与new操作符,其实和sizeof一样,都是c++内置的,然而像strlen就不是了,strlen属于函数。对于new的功能我们是没有办法改变的,当我们new一个对象时,new为我们做了两件事情,一、申请一块足够的内存空间供存放对象,对于new一个数组对象,编译器会计算出总共的空间,然后执行类似c语言中malloc函数类似的功能。二、初始化对象,对于单个对象,包括包括基本对象和类对象,可以通过括号初始化,比如int * pn = new int(3); A * pa = new A(3); 然而对于数组不能初始化,对于类对象

关于getClass(),Object.class,getClassLoader的理解

别说谁变了你拦得住时间么 提交于 2019-12-13 02:03:35
1、对Class类的理解:Class类包含了类的信息,如构造方法、方法、属性,可用于反射。以下是所有方法 2、获取Class类对象的几种方法: Test test = new Test(); (1).test.getClass(); 在运行时确定,所以运行实例才是该类对象。super.getClass()不能获得父类的类对象,仍然是当前类对象。 获得父类类对象: test.getClass().getSuperclass() class Father{ public void showName(){ System.out.println("Father..."); } } class Child extends Father{ public void showName(){ System.out.println("children"); } } Father father = new Child(); System.out.println(Father.class); 结果是 Father System.out.println(father.getClass()); 结果是 Child (2).Test.class; 在编译时确定,返回当前类的类对象实例。不会加载静态变量 获得父类类对象: Test.class.getSuperclass() (3).Class.forName(

java 接口

心已入冬 提交于 2019-12-12 04:35:17
目录 java 接口 1.接口 2.接口类的特点: 3.使用implements 来调用接口类, 4.实例化接口类 5.接口类中可以包含常量 6. 默认方法和静态方法 7.多接口继承 7.1接口类中的重名方法 7.2 接口中同名变量 8.接口的继承 8.1 继承的多接口存在同名的默认方法 java 接口 1.接口 可以使用接口让两个或者多个没有继承关系的类产生关系 1、创建时右键包名选interface 2.接口类名一般以大写"I"开头 2.接口类的特点: 1.接口l类访问修饰符:public 默认,可以不写 2..接口类的方法没有方法体; 3.接口当中抽象方法可以不写abstract关键字; 3.使用implements 来调用接口类, 如果一个类调用了接口类,那就必须实现重写接口类中的方法(特性类似于抽象方法),否侧需要将该类设置为抽象类 一个类调用了接口类,这个类就具有了接口类中的所有行为能力(类似与继承) 以下两个类分别调用了接口类Iphoto Camera类 FourthPhone类 4.实例化接口类 1.如果是使用接口类创建对象,用含有接口类方法的类来实例化对象(使用接口类引用指向调用的接口类的类对象), 2.只能用含有接口类方法的类来实例化对象,而且接口类本身不能创建对象(特性类似于抽象类) 注意:ip对象只能调用重写接口类方法的那个方法;(特性类似于向上转型) 5

赋值兼容规则(C++)

戏子无情 提交于 2019-12-11 10:26:16
在一定条件下,不同类型的数据之间可以进行类型转换,如可以将整型数据赋给双精度型变量。在赋值之前,先把整型数据转换成双精度型数据,然后再把它赋给双精度型变量。这种不同类型数据之间的自动转换和赋值,称为赋值兼容。在基类和派生类对象之间也存有赋值兼容关系,基类和派生类对象之间的赋值兼容规则是指在需要基类对象的任何地方,都可以使用其子类对象来代替。 下面主要讲积基类和派生类对象之间的赋值兼容 1· 派生类的对象可以赋值给基类对象。 A a1; //定义基类A对象a1 B b1; //定义类A的公用派生类B的对象b1 a1=b1; //用派生类B对象b1对基类对象a1赋值 在赋值时舍弃派生类自己的成员,只进行数据成员的赋值。 实际上,所谓赋值只是对数据成员赋值,对成员函数不存在赋值问题,内存中数据成员和成员函数是分开的。 注意: 赋值后不能企图通过对象a1去访问派生类对象b1的成员,因为b1的成员与a1的成员是不同的。 假设age是派生类B中增加的公用数据成员,分析下面的用法: a1.age=23;//错误,a1中不包含派生类中增加的成员 b1.age=21; //正确,b1中包含派生类中增加的成员 只能用子类对象对其基类对象赋值,而不能用基类对象对其子类对象赋值,理由是显然的,两种对象的大小是不同的,因为基类对象不包含派生类的成员无法对派生类的成员赋值。同理

关于super关键字

时光毁灭记忆、已成空白 提交于 2019-12-10 16:59:02
说到super关键字我们就不得不说到this关键字,我们都知道this总是指向当前函数所在的的对象,而super关键字则是指向当前对象的原型。 在java中super关键字通常有两种用法:一是用在子类的构造方法里面;二是用在子类里调用隐藏或重写的属性或行为; 1.super关键字可以在子类的构造方法中显式地调用父类的构造方法,super()必须为子类构造函数的第一行; 2.super可以用来访问父类的成员变量或者方法,当子类成员变量或方法与父类有相同的名字时也会覆盖父类的成员变量或方法,这个时候想要访问父类的成员变量或方法只能通过super关键字来访问,子类方法中的super.方法名()不需要位于第一行。 class FatherClass { public int value; public void f() { value=100; System.out.println("父类的value属性值="+value); } //父类构造方法 public FatherClass(){ System.out.println("FatherClass constructor"); } } class ChildClass extends FatherClass { /** * 子类除了继承父类所具有的value属性外,自己又另外声明了一个value属性, * 也就是说

014-Java多态-instanceof关键字

▼魔方 西西 提交于 2019-12-10 14:18:59
目录 多态定义 多态的前提 格式 多态的好处 多态访问成员变量的两种方式 在多态的代码当中,成员方法的访问规则 引用类型转换 向上转型 向下转型 为什么要转型 instanceof关键字 感谢关注 多态是继封装、继承之后,面向对象的第三大特性。 生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如飞的动作,昆虫、鸟类和飞机,飞起来也是不一样的。可见,同一行为,通过不同的事物,可以体现出来的不同的形态。多态,描述的就是这样的状态。 多态定义 多态: 是指同一行为,具有多个不同表现形式。 多态的前提 1.继承或者实现 2. 方法的重写,不重写是无意义的 3. 父类引用指向子类对象 格式 格式: 父类名称 对象名 = new 子类名称(); 或者: 接口名称 对象名 = new 实现类名称(); 父类类型 变量名 = new 子类对象; 变量名.方法名(); 父类类型:指子类对象继承的父类类型,或者实现的父接口类型。 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,执行的是子类重写后方法。 多态的好处 实际开发的过程中,父类类型作为方法形式参数,传递子类对象给方法,进行方法的调用,更能体现出多态的扩展、性与便利。 多态访问成员变量的两种方式 1. 直接通过对象名称访问成员变量:看等号左边是谁,优先用谁,没有则向上找。 2.