类对象

C++运算符重载一:运算符重载、复数类CComplex、输出运算符重载

帅比萌擦擦* 提交于 2020-03-11 13:15:03
文章目录 一、运算符重载 二、复数类CComplex 三、输出运算符重载 一、运算符重载 运算符重载 : 使对象的运算运算表现得和编译器内置类型一样,使同一个运算符可以有不同的功能。即定义一个重载运算符的函数,使指定的运算符不仅能实现原有的功能,而且能实现在函数中指定的新的功能。 运算符重载实质上是函数的重载,重载运算符的函数一般格式如下 : 函数类型 operator 运算符名称(形参表) {对运算符的重载处理} operator是关键字,是专门用于定义重载运算符的函数的,运算符名就是C++已有的运算符。 运算符重载的规则: (1)C++不允许用户自己定义新的运算符,只能对已有的C++运算符进行重载。 (2)C++允许重载的运算符 不能重载重载的运算符只有5个: ① .   成员访问运算符 ② *   成员指针访问运算符 ③ ::   域运算符 ④sizeof 长度运算符 ⑤ ?:   条件运算符 (3)重载不能改变运算符运算对象(即操作数)的个数 (4)重载不能改变运算符的优先级别 (5)重载不能改变运算符的结核性 (6)重载不能改变默认的参数 (7)重载的运算符必须和用户自定义类型的对象一起使用,其参数至少有一个是类对象(或类对象的引用) (8)用于类对象的运算符一般必须重载,但有两个例外,“=”和“&”不必用户重载 运算符重载的函数有两种处理方式: 1

数据模型层Model

此生再无相见时 提交于 2020-03-10 19:14:51
因为我们要把数据从数据库获取到的话,需要使用数据模型层Model来获取。模型层Model和Controller一样也是一个类文件。 如果要从数据库里面获取数据的话,第一步需要的是TP框架它关于数据库的这个配置文件给修改掉。 先找到Home->Conf->里面的config.php文件夹打开,在这里边加上关于TP框架数据库的配置,或者可以修改。如下图 再找到TP框架本身的关于数据库的设置 路径是thinkphp->Thinkphp->Conf->convention.php打开后搜索找到关与需要修改的数据库的配置拿出来复制粘贴到config.php文件里面。 其中上图中的启用字段缓存配置文件在开发阶段最好改成false。默认是true 如果开启了字段缓存,那么现在所建的数据表,所有的字段都会被缓存下来,如果后期再去修改了字段。例如添加或修改了一个字段后它都不会表现出来 而且往里添加数据的时候就会报错。开发过程中建议打成false,这样后期再去修改数据库的话也没有关系,它能够立马显示出来。 这样设置完成数据库的配置文件后就可以取访问数据库里面的数据了。 创建模型对象来访问数据库: 在TP框架里面创建访问数据库对象有两种方法分别是M方法和D方法 首先是M方法: <?php namespace Home\Controller; use Think\Controller; class

代理与动态代理

删除回忆录丶 提交于 2020-03-07 17:42:19
概述 代理 生活中的代理: 比如暴雪又新出了一款游戏,作为一个中国用户,没有很好的方式直接从美国拿到游戏产品,就需要等到中国的某个代理商被暴雪授权代理,才可以玩上暴雪新出的这款游戏,那么代理的作用也就显而易见了,就是为了方便的适应一些不同地区的用户而产生的中间媒介,通过代理,可以更有效的将一些产品发行出去,生活中这样代理的例子比比皆是 程序中的代理: 如果一些实现了同一接口的类在实现方法的时候,有了新的需求,需要增加一些异常处理、日志、计算方法的运行时间、事务管理等操作,但是我们又不能去修改源代码,这样严重影响了程序的扩展性,这个时候,我们就可以使用代理,代理与目标类实现同一个接口,代表着代理类与目标类具有同名的方法,调用者不需要直接调用目标对象,而是使用代理间接调用目标对象的方法,并在这个过程中加入自己的处理代码,这就是程序中的代理 代理实现图示 代理可以处理的问题 系统中存在交叉业务,一个交叉业务就是要切入到系统中的一个方面,如下所示: 用具体的程序代码描述交叉业务: 交叉业务的编程问题即为面向方面的编程(Aspect oriented program ,简称AOP),AOP的目标就是要使交叉业务模块化。 可以采用将切面代码移动到原始方法的周围,这与直接在方法中编写切面代码的运行效果是一样的,如下所示: 使用代理技术正好可以解决这种问题,代理是实现AOP功能的核心和关键技术。

Java:面向对象的三大特征

回眸只為那壹抹淺笑 提交于 2020-03-07 13:39:03
一、封装 1. 概述 定义:将类的某些信息隐藏在类的内部,不允许外部程序直接访问。只能通过该类提供的 特定的方法 来实现对隐藏信息的操作和访问,也就是: 要隐藏对象的信息 同时也要留出访问的接口 2. 封装的特点 隐藏类的实现细节,实现了信息的隐藏及安全性,方便修改和实现 提高了程序的模块化 ,提高系统独立性和软件的可重用性,且易于维护 具体实现是编写该类的人控制的,让 使用者只能通过事先定制好的 方法 来访问数据 ,实现者可以方便地加入控制逻辑,限制对属性的不合理操作 封装的实现 变量:使用 private 修饰,这就是变量的封装 方法:也是一种封装,封装了多条代码 类: 也是一种封装,封装了多个方法 封装的实现步骤: 封装的实现 public class Cat { //成员属性: //修改属性可见性---private 限定只能在当前类内访问,只能修饰成员变量 private String name; public Cat() { } //创建get/set方法 //在get/set方法当中添加属性的限定 public void setName(String name) { //set方法一般没有返回值 this.name = name; } public String getName() { return "我是一只名叫"+this.name+"的猫咪"; } public

设计模式的六大原则

喜欢而已 提交于 2020-03-07 13:06:35
一、单一职责原则(Single Responsibility Principle) 二.开闭原则(Open-Closed Principle, OCP) 三、里氏代换原则(Liskov Substitution Principle, LSP) 四、依赖倒置原则(Dependence Inversion Principle,DIP) 五、接口隔离原则(Interface Segregation Principle, ISP) 六、迪米特法则(Law of Demeter, LoD) 总结 一、单一职责原则(Single Responsibility Principle) 定义:一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。 问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有 可能会导致原本运行正常的职责P2功能发生故障。 单一职责原则告诉我们:一个类不能太“累”!在软件系统中,一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中,即将不同的变化原因封装在不同的类中

猫狗队列

守給你的承諾、 提交于 2020-03-07 10:58:36
【说明】:   本文是左程云老师所著的《程序员面试代码指南》第一章中“猫狗队列 ”这一题目的C++复现。   本文只包含问题描述、C++代码的实现以及简单的思路,不包含解析说明,具体的问题解析请参考原书。   感谢左程云老师的支持。 【题目】:   宠物、狗和猫的类如下: /* *文件名:pet.h *作者: *摘要:pet、cat、dog的原声明及实现 */ #ifndef _PET_H #define _PET_H #include <string> using namespace std; class Pet { public: Pet(string type) { this->type = type; } string getPetType() { return type; } private: string type; }; class Dog:public Pet { public: Dog():Pet("dog"){} }; class Cat:public Pet { public: Cat():Pet("cat"){} }; #endif View Code   实现一种猫狗队列的结构,要求如下: 用户可以调用 push 的方法,将 cat 类或者 dog 类的实例放入队列中; 用户可以调用 popAll 的方法,将队列中所有的实例按照进队列的先后顺序依次弹出;

Python__高级

孤街浪徒 提交于 2020-03-07 09:27:32
一.元类 1.Python 中类方法、类实例方法、静态方法有何区别? 类方法 :是类对象的方法,在定义时需要在上方使用“@classmethod”进行装饰,形参为 cls,表示类对象,类对象和实例对象都可调用; 类实例方法 :是类实例化对象的方法,只有实例对象可以调用,形参为 self,指代对象本身; 静态方法 :是一个任意函数,在其上方使用“@staticmethod”进行装饰,可以用对象直接调用,静态方法实际上跟该类没有太大关系。 2.Python 中如何动态获取和设置对象的属性? if hasattr(Parent,'x'): print(getattr(Parent,'x')) setattr(Parent,'x',3) print(getattr(Parent,'x')) 二.内存管理与垃圾回收机制 1. Python 的内存管理机制及调优手段? 内存管理机制:引用计数、垃圾回收、内存池。 引用计数:引用计数是一种非常高效的内存管理手段, 当一个 Python 对象被引用时其引用计数增加 1, 当 其不再被一个变量引用时则计数减 1. 当引用计数等于 0 时对象被删除。 1. 引用计数 引用计数也是一种垃圾收集机制,而且也是一种最直观,最简单的垃圾收集技术。当 Python 的某 个对象的引用计数降为 0 时,说明没有任何引用指向该对象,该对象就成为要被回收的垃圾了。比

如何通过反射创建对象?

自作多情 提交于 2020-03-06 11:33:43
List, Set, Map是否继承自Collection接口? ( 答:List,Set是Map不是 )→ https://blog.csdn.net/qq_41620160/article/details/79450365 (CSDN) https://www.cnblogs.com/zhaozhaozhang/p/5819471.html (博客园) https://jingyan.baidu.com/article/95c9d20d11fccdec4e756196.html (百度百科) 如何通过反射创建对象? → https://www.nowcoder.com/interview/ai/report?roomId=145319 (牛客) 参考回答 - 方法1:通过类对象调用newInstance()方法,例如:String.class.newInstance()<br /> - 方法2:通过类对象的getConstructor()或getDeclaredConstructor()方法获得构造器(Constructor)对象并调用其newInstance()方法创建对象,例如:String.class.getConstructor(String.class).newInstance("Hello"); https://www.cnblogs.com/bupt-liqi/p

继 承(面向对象特征之二)

▼魔方 西西 提交于 2020-03-06 09:34:32
好处: 1 :提高了代码的复用性。 2 :让类与类之间产生了关系,提供了另一个特征多态的前提。 父类的由来:其实是由多个类不断向上抽取共性内容而来的。 java中对于继承,java只支持单继承。java虽然不直接支持多继承,但是保留了这种多继承机制,进行改良。 单继承:一个类只能有一个父类。 多继承:一个类可以有多个父类。 为什么不支持多继承呢? 因为当一个类同时继承两个父类时,两个父类中有相同的功能,那么子类对象调用该功能时,运行哪一个呢?因为父类中的方法中存在方法体。 但是java支持多重继承。A继承B B继承C C继承D。 多重继承的出现,就有了继承体系。体系中的顶层父类是通过不断向上抽取而来的。它里面定义的该体系最基本最共性内容的功能。 所以,一个体系要想被使用,直接查阅该系统中的父类的功能即可知道该体系的基本用法。那么想要使用一个体系时,需要建立对象。建议建立最子类对象,因为最子类不仅可以使用父类中的功能。还可以使用子类特有的一些功能。 简单说:对于一个继承体系的使用,查阅顶层父类中的内容,创建最底层子类的对象。 子父类出现后,类中的成员都有了哪些特点: 1 :成员变量。 当子父类中出现一样的属性时,子类类型的对象,调用该属性,值是子类的属性值。 如果想要调用父类中的属性值,需要使用一个关键字: super This : 代表是本类类型的对象引用。 Super :

2019-05-26 java学习日记

左心房为你撑大大i 提交于 2020-03-04 15:25:13
面向对象多态的概述及其代码体现 多态(polymorphic):事物存在的多种形态 多态前提 1,要有继承关系。 2,要有方法重写。 3,要有父类引用指向子类对象。 例子 class Demo1_Polymorphic {   public static void main(String[] args) {     Cat c = new Cat(); c.eat();     Animal a = new Cat(); //父类引用指向子类对象      a.eat(); } } class Animal {    public void eat() {     System.out.println("动物吃饭"); } } class Cat extends Animal {   public void eat() {     System.out.println("猫吃鱼"); } } 多态中的成员访问特点: 成员变量 编译看左边(父类),运行看左边(父类) 成员方法 编译看左边(父类),运行看右边(子类)。 这叫做动态绑定, 编译看父类有没有这个方法,运行是运行子类的。 静态方法 编译看左边(父类),运行看左边(父类)。 (静态和类相关,算不上重写,所以,访问还是左边的) 只有非静态的成员方法,编译看左边,运行看右边 (是通过类名点去调用的) 例子 class Demo2