virtual

在Virtual PC中安装Linux

隐身守侯 提交于 2020-02-20 09:54:08
今天尝试在Virtual PC 下安装Linux,网上找到篇文章讲解了安装过程和注意的问题,我觉得比较重要的内容翻译如下: 原文地址 2003年1月微软买下Virtual PC的前身 Connectrix Corp.尽管微软名义上不支持BSD, Unix, Linux, NetWare and Solaris,但是这些系统还是可以安装在Virtual PC中,而且运行的不错。 ...... 配置X系统: 在安装的最后部分,你将被要求配置Linux的X图形系统。真如上文提到的,配置程序将检测到一个S3 Trio64 显卡,请选择这块显卡(有时候,你也许可以选择VESA2.0驱动,有人说这个驱动要比S3 Tri的好)。不管建议选择多少显存,只使用8MB,否则,你的屏幕显示上将有问题。选择16位和32位的色彩,不要选择24位 修正时间同步: Linux guests不能同步系统时间,必须用NTP (Network Time Protocol)和Internet时间服务器同步。在主菜单里选择Date/Time,或在terminal里输入redhat-config-date 当接口打开时,Enable Network Time Protocol,从列表里选择服务器,这样NTP将开始运行 提升虚拟机速度的技巧: 分配更多的内存 使用一块独立的硬盘分区作为虚拟硬盘以提升数据访问速度

rabbitmq用户及vhost配置

旧时模样 提交于 2020-02-20 08:21:36
文章目录 用户 添加用户 配置virtual hosts 授权用户访问vhost 控制台简单说明 用户 上一节我们是通过guest用户登录的,但是实际工作中肯定不能以该账户使用,通常是会设置多个账户供不同的业务方使用。 下图中可以看到guest是administrator权限。 添加用户 我这里作为演示,添加一个admin用户,tags(就是角色)选的是admin(直接点击下面的几个选项即可)。 rabbitmq角色说明: 超级管理员(administrator) 可登陆管理控制台,可查看所有的信息,并且可以对用户,策略(policy)进行操作。 监控者(monitoring) 可登陆管理控制台,同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等) 策略制定者(policymaker) 可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。 普通管理者(management) 仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。 其他 无法登陆管理控制台,通常就是普通的生产者和消费者。 添加完成后: 可以看到 virtual hosts 显示 no access 。那么接下来配置 virtual hosts 配置virtual hosts 我这里添加了一个名为 /admin_vhost 的vhost

c++复习 多态

偶尔善良 提交于 2020-02-19 00:55:27
虚函数 什么是虚函数? 指向基类的指针在操作它的多态类对象时,会根据不同的类对象调用其相应的函数,这个函数就是虚函数,用virtaul修饰函数名。 虚函数的作用是在程序运行阶段动态地选择合适的成员函数 在派生类中重新定义的函数应与虚函数具有相同的形参个数和形参类型,(参数顺序也要一致),以实现统一接口, 如果派生类中没有重新定义虚函数,则它集成基类的虚函数 虚函数的重写 虚函数的重写:派生类中有一个跟基类的完全相同虚函数,我们就称子类的虚函数重写了基类的虚函数,完全相同是指:函数名、参数、返回值都相同。另外虚函数的重写也叫作虚函数的覆盖。 class Person { public : virtual void BuyTicket ( ) { cout << "买票-全价" << endl ; } } ; class Student : public Person { public : virtual void BuyTicket ( ) { cout << "买票-半价" << endl ; } } ; void Func ( Person & p ) { p . BuyTicket ( ) ; } int main ( ) { Person ps ; Student st ; Func ( ps ) ; Func ( st ) ; return 0 ; } 不规范的重写行为

C++多态

青春壹個敷衍的年華 提交于 2020-02-16 09:51:28
1概念 多态 :不同类型对象调用相同接口完成不同的行为。 1.1覆盖(重写override)成立的三个条件 1.继承 2.子类覆盖(重写)父类虚函数 3.父类指针/引用指向子类 1.2虚函数定义规则: 如果虚函数在基类与派生类中出现,仅仅是名字相同,而形式参数不同,或者是返回类型不同,有无const. 那么 即使加上了virtual关键字,也是不会覆盖。 只有 类的成员函数才能说明为虚函数 ,因为虚函数 仅适合 用与有继承关系的类对象,所以普通函数不能说明为虚函数。 静态成员函数不能是虚函数 ,因为静态成员函数的特点是不受限制于某个对象。 内联(inline)函数不能是虚函数 ,因为内联函数不能在运行中动态确定位置。即使虚函数在类的内部定义,但是在编译的时候系统仍然将它看做是非内联的。 构造函数不能是虚函数 ,因为构造的时候,对象还是一片未定型的空间,只有构造完成后,对象才是具体类的实例。 析构函数可以是虚函数 ,而且通常声明为虚函数。 1.3多态的实现原理分析 当类中声明虚函数时,编译器会在类中生成一个 虚函数表(基类和派生类中各自都会生成一个) 1.4虚函数表 虚函数表是一个 存储类成员函数指针 的数据结构 虚函数表是由 编译器自动生成和维护 的 virtual函数会被 编译器 放入虚函数表中 存在虚函数时,每个对象当中都有一个 指向虚函数表的指针 (vptr指针) 1

【设计模式】——迭代器模式

為{幸葍}努か 提交于 2020-02-15 23:25:37
迭代器模式(Iterator) ,提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。当你需要访问一个聚集对象,而且不管这些对象是什么都需要遍历的时候,或者你需要对聚集有多种方式遍历时,你就应该考虑用迭代器模式,为遍历不同的聚集结构提供如开始、下一个、是否结束、当前哪一项等统一接口。 #include <iostream> #include <vector> using namespace std; typedef string object; //Iterator迭代器抽象类 class Iterator { //用于定义得到开始对象、得到下一个对象、判断是否到结尾、当前对象等抽象方法 public: virtual object First()=0; virtual object Next()=0; virtual bool IsDone()=0; virtual object CurrentItem()=0; }; //Aggregate聚集抽象类 class Aggregate { public: virtual int Count() = 0; virtual void Push(const object& strValue)=0; virtual object Pop(const int nIndex)=0; virtual Iterator

C++设计模式-访问者模式

喜夏-厌秋 提交于 2020-02-14 01:53:16
动机 在软件构建的过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法),如果直接在基类中做这样的更改,将会给子类带来很繁重的变更负担,甚至破坏原有设计。 如何在不更改类层次结构的前提下,在运行时根据需要透明地为类层次结构上的各个类动态添加新的操作,从而避免上述问题? 模式定义 表示一个作用于某对象结构中的各元素的操作。使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作用于这些元素的信操作(变化) 结构 ObjectStructure(对象结构):能够枚举它的元素,同时提供一个高层的接口以允许该访问者访问它的元素。 示例 class Visitor; class Element { public: virtual void accept(Visitor& visitor) = 0; //第一次多态辨析 virtual ~Element(){} }; class ElementA : public Element { public: void accept(Visitor &visitor) override { visitor.visitElementA(*this); } }; class ElementB : public Element { public: void accept(Visitor &visitor) override { visitor

中介者模式

余生长醉 提交于 2020-02-14 00:57:03
中介者模式 1.概述   中介者模式的本质在于”封装交互“。   用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式的相互引用,从而降低耦合;而且可以独立地改变它们之间的交互。 2.优缺点 优点    1)中介者类将对象的交互行为集中在一起,减少子类生成。   2)将各要交互的对象解耦。   3)对象与对象的交互(多对多关系)转换成中介者与对象的交互(一对多关系),更易于理解、维护和扩展。   4)使注意力从对象各自本身的行为转移到它们之间的交互上来。有助于弄清楚一个系统中的对象是如何交互的。   5)它使控制集中化,中介者模式将交互的复杂性变为中介者的复杂性。 缺点    1)“中介“承担了较多的责任,它可能变得比任一个Colleague都复杂。且 一旦这个中介对象出现了问题,那么整个系统就会受到重大的影响。   2)新增加一个同事类时,不得不去修改抽象中介者类和具体中介者类,此时可以使用观察者模式和状态模式来解决这个问题。 3.何时选用中介者模式   1)一组对象之间的通信方式比较复杂,导致相互依赖,结构混乱,可以采用中介者模式   2)一个对象引用很多对象,并且跟这些对象交互,导致难以复用该对象   但是不是所有系统都需要使用中介者模式把多对多的关系转化为多对一对多的。若各同事之间本来的关联就很清晰(没有交错关联),或这种关联并不复杂,没有必要应用中介者。 4

018_linuxC++之_抽象类的引入

非 Y 不嫁゛ 提交于 2020-02-12 18:44:13
(一)参考原文链接: C++多态 (二) 抽象类 在介绍抽象类之前,我们先介绍一下纯虚函数。 1.纯虚函数 在基类中仅仅给出声明,不对虚函数实现定义,而是在派生类中实现。这个虚函数称为纯虚函数。普通函数如果仅仅给出它的声明而没有实现它的函数体,这是编译不过的。纯虚函数没有函数体。 纯虚函数需要在声明之后加个=0; class <基类名> { virtual <类型><函数名>(<参数表>)=0; ...... }; 2.抽象类 含有纯虚函数的类被称为抽象类。抽象类只能作为派生类的基类,不能定义对象,但可以定义指针。在派生类实现该纯虚函数后,定义抽象类对象的指针,并指向或引用子类对象。 1)在定义纯虚函数时,不能定义虚函数的实现部分; 2)在没有重新定义这种纯虚函数之前,是不能调用这种函数的。 抽象类的唯一用途是为派生类提供基类,纯虚函数的作用是作为派生类中的成员函数的基础,并实现动态多态性。继承于抽象类的派生类如果不能实现基类中所有的纯虚函数,那么这个派生类也就成了抽象类。因为它继承了基类的抽象函数,只要含有纯虚函数的类就是抽象类。纯虚函数已经在抽象类中定义了这个方法的声明,其它类中只能按照这个接口去实现。 3.接口和抽象类的区别 1)C++中我们一般说的接口,表示对外提供的方法,提供给外部调用。是沟通外部跟内部的桥梁。也是以类的形式提供的,但一般该类只具有成员函数,不具有数据成员

C++学习笔记7

瘦欲@ 提交于 2020-02-11 15:56:10
目录 六、动态联编与虚函数 1、联编的概念 2、静态联编 3、动态联编 4、虚函数 5、虚析构函数 6、纯虚函数和抽象类 六、动态联编与虚函数 1、联编的概念 联编是指一个计算机程序自身彼此关联(使一个源程序经过编译、 连接, 成为一个可执行程序) 的过程, 在这个联编过程中, 需要确定程序中的操作调用(函数调用) 与执行该操作(函数) 的代码段之间的映射关系, 按照联编所进行的阶段不同, 可分为静态联编和动态联编。 2、静态联编 静态联编又称静态束定、 早期联编、 前期联编。 静态联编是指联编工作是在程序编译链接阶段进行的, 静态联编又称早期联编, 因为这种联编是在程序开始运行之前完成的。 在程序编译阶段进行的这种联编又称静态束定, 在编译时就解决了程序中的操作调用与执行该操作代码间的关系, 确定这种关系又被称为束定, 编译时束定又称为静态束定。 静态联编就是, 编译器在程序运行前就知道调用什么函数做什么事 。 静态联编特点: 速度快效率高 。 3、动态联编 动态联编又称动态关联、 动态束定、 后期联编、 晚期联编。 动态联编是指编译程序在编译阶段并不能确切地知道将要调用的函数, 只有在程序执行时才能确定将要调用的函数, 为此要确切地知道将要调用的函数,要求联编工作在程序运行时进行, 这种在程序运行时进行的联编工作被称为动态联编。 C++规定: 动态联编是在 虚函数

设计模式---接口隔离模式之适配器模式(Adapter)

会有一股神秘感。 提交于 2020-02-10 04:41:31
一:概念 通过Adapter模式可以改变已有类(或外部类)的接口形式 二:动机 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。 如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口? 生活中如电源适配器,vga转换线等,适配器模式可以通过将旧的类接口转化为新接口,从而解决新环境要求的接口问题。 三:模式定义 将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。                                        --《设计模式》Gof 四:类图(结构) 五:代码讲解 //目标接口(新接口) class ITarget{ public: virtual void process()=0; }; //遗留接口(老接口) class IAdaptee{ public: virtual void foo(int data)=0; virtual int bar()=0; }; //遗留类型,符合老的接口 class OldClass: public IAdaptee{ //.... }; //对象适配器 class Adapter: public ITarget{ //继承