![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
笔记
sheeper200626
这个作者很懒,什么都没留下…
展开
-
HeadFirst设计模式:装饰者模式
装饰者对象:给爱用继承的人一个全新的设计眼界关键词星巴兹咖啡、继承、超类(所有类都继承同一个父类)、多态、运行时编程、被装饰者和装饰者一层又一层、分类继承(其中需要公共实现接口)设计原则开放-关闭原则:类应该对扩展开放,对修改关闭例子星巴兹代码(超类)饮料代码:继承超类的一类子类调料代码:需要现实现一个接口,然后继承该接口实现调料代码,也是超类的一类子类最后测试代码,供应咖啡补充装饰者模式缺点工厂(factory)模式和生成器(builder)模式...原创 2021-12-26 22:22:16 · 101 阅读 · 0 评论 -
Head First:欢迎来到设计模式世界
有些人已经解决了你的问题关键词Duck、Fly、Queck、Interfere接口为成员变量、OO原则、不变与变分离(高耦合)内容在Duck父类中,行为通过接口实现,使得扩展性好,以及子类通过继承父类同样可以通过加入具体的接口得到扩展。例子:Duck中有个接口为FlyBehavior为成员变量,通过成员函数PerformFly()调用FlyBehavior接口中的函数Fly()实现,ModelDuck继承Duck,具体行为NoWingFly继承FlyBehavior,可以通过在构造函数中通过多态原创 2021-12-23 12:03:17 · 117 阅读 · 0 评论 -
C++:预处理器、作用域、static、const以及内存管理
1、宏定义及替换#define ADD(x,y) x+yint m=3;m += m*ADD(m,m);//注意:宏定义一般大写并且不加分号结束,且宏替换就是替换,不做别的事//例子中为: m = m + m*x + y;而不是m = m + m*(x + y);所以就是简单的替换2、作用域注意:全局>静态>局部语句(for,while,if)中的局部变量结束自动销毁。3、static①隐藏②默认初始化为0,但是函数保存在未初始化的全局或静态的BSS 段。③保持局部变原创 2020-07-13 16:14:35 · 129 阅读 · 0 评论 -
C++:cup内存存储格式
1、分为大端存储和小端存储大端存储就是变量十六进制中高位地址保存到CPU内存的地位地址中。小端存储就是变量十六进制中地位地址保存到CPU内存的地位地址中2、计算数组指针的内存大小sizeof()注意:指针的内存大小与系统有关,32位都是4byte,64位都是8byte,而数组指针和变量指针所指向的内存大小不同,也就是++的时候前进的步长不同。...原创 2020-07-07 15:47:54 · 190 阅读 · 0 评论 -
C++:循环和关系表达式
1、for(int i = 0;i<size;i++)声明语句表达式不带分号,只能出现在for语句中,也就是在for中声明并初始化的变量i,当程序循环结束后,变量i就消失了。不会离开for语句,所以为了i延续,需要在for外声明i。2、各种数据类型的内存类型32位系统64位系统short2bytes2byteschar1bytes1bytesint4bytes8byteslong4bytes8byteslong long8bytes原创 2020-07-06 12:59:14 · 131 阅读 · 0 评论 -
测试++、--前后缀、=赋值、指针引用优先级
i++ 与 ++i 的主要区别有两个:1、 i++ 返回原来的值,++i 返回加1后的值。2、 i++ 不能作为左值,而++i 可以。本来我想当然的以为在C语言中指针预算符的优先级肯定比++高,后来在写程序时发现并没有这么当然。在C语言中,自增运算符++和指针运算符*的优先级关系为左++ > * > 右++比如 ++ *i 相当于 ++ (*i) ,指针i对应的变量+1。*i ++ 相当于 * (i++) ,指针i,也就是地址值 +1(其实是加1个变量所占的地址空间)#inc原创 2020-07-04 19:49:21 · 856 阅读 · 0 评论 -
C++:组合与继承
Q:类和类有什么关系呢?A:组合委托继承一、复合(composition,组合),表示has aadapter:改造、适配、配接template<class T>class queue{...protected: deque<T> c;//这里就表示queue中has a deque.....public: bool empty() const{return c.empty();}//于是queue中的所有的功能都是调用deque来实现的。 void原创 2020-07-03 09:29:16 · 132 阅读 · 0 评论 -
C++:堆、栈与内存管理
一、所谓stack和heap例子:class complex{...};....//作用域(scope){ complex c1(1,2);//从c1在作用域中相当于int a=0;的局部变量,存在于作用域中的一块内存,当调用函数是就会形成stack来方式参数以及返回地址,但是在函数结束的时候,这个对象就会消失。 complex * p = new complex(3);//这是通过new动态分配的内存,是通过操作系统提供的一块global内存空间,程序通过new动态分配独得若干区块,保存在h原创 2020-07-02 22:12:41 · 104 阅读 · 0 评论 -
C++:复Complex类的实现过程
1、不带指针的#pragma once#ifndef __COMPLEX__#define __COMPLEX__class complex{ double re, im;//他们是私有的,一般不能直接取得,要取在private中建立的是非成员函数,例如友元函数 friend complex& __doapl(complex&, const complex&);public: complex(double r =0, double i = 0):re(r),im(i原创 2020-07-02 12:46:07 · 269 阅读 · 0 评论 -
C++:操作符重载与临时对象
operator overlording(操作符重载,成员函数)this实现:c2 += c2;//重载+=,所有的成员函数都带有一个参数,即this,上面的c2就是*this,也就是传入this = &c2;inline complex&complex::opertaor += (const complex& r){return __doapl(this,r);//这里的this就是+=左边的部分,并且传入另一个函数中}inline complex&__d原创 2020-07-01 15:56:20 · 162 阅读 · 0 评论 -
C++:头文件与类的声明
complex.h1、防卫式声明#ifndef COMPLEX//告诉编译器曾经没有#define COMPLEX。。。。#endif作用:发展一个复数,把它放在头文件中,因为很多程序要用到这个头文件,include"complex",当第一次include这个头文件后,编译器就会进入头文件中,并且定义_COMPLEX_,这个就定义好了,在第二次include时,就不需要再进入头文件定义了,因为编译器已经有_COMPLEX_了,避免了重复的include含入 的动作。Header(头文件)布局原创 2020-07-01 14:35:30 · 2268 阅读 · 0 评论 -
C++:结构体
结构是一种比数组更灵活的数据格式,并且与int或其他数据类型一样,结构也能创建数组,叫做结构数组;结构中的成员数据通过成员运算符访问。初始化:有两种初始化方式(其他数据类型类似)struct Student { char name[20]; string Number; double grade;};int main(){ Student id1 = { "Young","S1809W0657",99.0 };//第一种初始化方式 Student id2{ "Kobe","S1809原创 2020-06-30 21:30:42 · 62 阅读 · 0 评论