virtual

Virtual overloaded operators >> and <<

♀尐吖头ヾ 提交于 2020-06-15 21:22:26
问题 I need an interface that would require its subclasses to overload << and >> , but I'm not quite sure how since these operators aren't overloaded as member functions: std::istream& operator>> (std::istream& in, Student& student) { in >> student.name >> student.group; for (int& i : student.marks) { in >> i; } return in; } Maybe there's a way to make it a member function? 回答1: You could do something like this: class StudentInterface { public: virtual void readSelfFrom(std::istream& in) = 0; };

Turning a non-pure virtual function into pure in a subclass

耗尽温柔 提交于 2020-06-14 06:27:10
问题 So, I have this polymorphic hierarchy: ClassA Is not abstract, no pure virtual functions, but a few virtual functions ClassB:public ClassA Defines an extended interface for a certain type of subclass; is abstract with pure virtual functions ClassC:public ClassB Usable class, no more subclassing Here's the deal, I will have objects of ClassA and ClassC thrown together into containers and iterated through. To perform this iteration, a non-pure virtual function is present in ClassA but is empty

什么是Virtual Fabric?

好久不见. 提交于 2020-04-08 11:48:25
Virtual Fabric利用一种技术手段把一个公用的物理SAN fabric划分成多个虚拟的“工作域”,这种技术可以增加端口的使用效率,降低SAN Fabric物理互连时产生的资源损耗。使用Virtual Fabrics,客户可以将一个物理交换机划分为若干个逻辑交换机。而每个逻辑交换机均可独立地建立或从属于一个逻辑Fabric(逻辑SAN网),由此而构成的任意逻辑Fabric拥有独立的数据路径、Fabric架构配置(分区、服务质量(QoS)、互操作模式等)和管理。 由于不需要在存储区域网(SAN)中的每台交换机上启用逻辑交换机,因此可在现有环境中实现简单而无中断的部署。如图1所示,每个逻辑交换机分别属于一个逻辑Fabric。逻辑Fabric包括分配给它的所有逻辑交换机,而且还可能包括不支持Virtual Fabrics的物理交换机。多个逻辑Fabric内的数据传输可以通过共用 一种被称为“XISL”的特殊交换机间级联链路(ISL)来实现,XISL可以在同一条物理链路上传输多个逻辑Fabric的数据流,同时保持各个Fabric架构间彼此的相互隔离。 此外,逻辑Fabric还能够支持基于3层的集成路由(IR)。基于这一特性,由部分或一个或多个物理交换机所创建出的逻辑交换机即可创建或被指定成为一个骨干Fabric(BackboneFabric)

C# 读书笔记之访问虚方法、重写方法和隐藏方法

a 夏天 提交于 2020-04-07 05:34:51
C#允许派生类中的方法与基类中方法具有相同的签名:基类中使用关键字virtual定义虚方法;然后派生类中使用关键字override来重写方法,或使用关键字new来覆盖方法(隐藏方法)。 重写方法用相同的签名重写所继承的虚方法。 虚方法 声明用于 引入新方法 ,而 重写方法或隐藏方法 声明则是用于使现有的 继承虚方法专用化( 通过提供该方法的新实现 ) 注意:如果签名相同的方法在基类和派生类都进行了声明,但该方法没有声明为virtual和override/new,则派生类方法就会隐藏基类方法,但系统编译时会产生警告信息。因为隐藏方法会存在为给定类的实例调用错误方法的危险,故应该显示地定义隐藏方法。 调用虚方法时,将首先检查该对象的运行时类型,并调用派生类中的该重写成员。如果没有派生类重写该成员,则调用其原始数据。 默认情况下,C#方法是非虚拟的。 不能重写非虚方法 ,重写非虚方法将导致编译错误。 除了类方法外,还可以使用virtual关键字其他类成员以定义虚成员,包括属性【无参属性】、索引器【含参属性】或事件声明。虚拟成员的实现可在派生类使用关键字override来重写;或使用关键字new来覆盖。 注意:virtual 修饰符不能与static、abstract、private或override修饰符一起使用。 例: 虚方法,重写方法和隐藏方法示例:Dimensions类包含x

virtual 修饰符 C# .NET

老子叫甜甜 提交于 2020-04-07 02:30:49
virtual 关键字用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象。 例如,此方法可被任何继承它的类重写。 (C#参考) 1 public virtual double Area() 2 3 { 4 5 return x * y; 6 7 } 虚拟成员的实现可由派生类中的重写成员更改 调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员, 如果没有派生类重写该成员,则它可能是原始成员。 默认情况下,方法是非虚拟的。不能重写非虚方法。 virtual修饰符不能与static、abstract, private或override修饰符一起使用。除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。在静态属性上使用virtual修饰符是错误的。 通过包括使用override修饰符的属性声明,可在派生类中重写虚拟继承属性。 示例 在该示例中,Dimensions类包含x和y两个坐标和Area()虚方法。不同的形状类,如Circle、Cylinder和Sphere继承Dimensions类,并为每个图形计算表面积。每个派生类都有各自的Area()重写实现。根据与此方法关联的对象,通过调用正确的Area()实现,该程序为每个图形计算并显示正确的面积。 在前面的示例中,注意继承的类Circle

C#语法之virtual关键字

你说的曾经没有我的故事 提交于 2020-04-07 02:29:59
virtual 关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。例如,此方法可被任何继承它的类重写。 public virtual double Area() { return x * y; } 虚拟成员的实现可由派生类中的重写成员更改。 调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。 默认情况下,方法是非虚拟的。不能重写非虚方法。 virtual 修饰符不能与 static、abstract、private 或 override 修饰符一起使用。 除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。 在静态属性上使用 virtual 修饰符是错误的。 通过包括使用 override 修饰符的属性声明,可在派生类中重写虚拟继承属性。 在该示例中,Dimensions 类包含 x、y 两个坐标和 Area() 虚方法。不同的形状类,如 Circle、Cylinder 和 Sphere 继承 Dimensions 类,并为每个图形计算表面积。每个派生类都有各自的 Area() 重写实现。根据与此方法关联的对象,通过调用适当的 Area() 实现,程序为每个图形计算并显示适当的面积。 在前面的示例中,注意继承的类 Circle、Sphere 和 Cylinder

几篇虚拟映射文章粗读

∥☆過路亽.° 提交于 2020-04-06 14:17:29
On the Optimal Approach of Survivable Virtual Network Embedding in Virtualized SDN survivabke virtual network embedding(SVNE) 物理原件故障,VN能正常运行。两种策略:保护机制和恢复机制。 大多数映射仅是节点和连接映射,并没考虑拓扑特性,并假设物理设备总能良好运行。然而事实并非如此,这会导致严重问题而不能为租户提供服务。这篇文章考虑拓扑特性的虚拟网络生存力映射,考虑不同节点、连接的不同重要性,结合多控制器到交换机并发连接,路径多样性和网络延迟来映射以达到生存能力特性的目的。 大部分分两步,节点映射、连接映射,没考虑两者关系。考虑VNE生存性时没深入考虑虚拟控制器映射,而平等对待每个节点,也就是说并没有结合网络拓扑和控制器路径 目标最大化控制网络可靠性并保持成功率及收益比。 用cpu作为节点权重,并选用等级和接近性来作为网络中心度的优化策略。 分两个阶段:1,映射虚拟sdn控制器和虚拟请求交换机到物理节点,然后决定是否相应的虚拟连接。虚拟控制器映射与一般的控制器位置选择问题相似。不同在于逻辑独立,和动态改变。2是虚拟连接映射。 下三篇论文的结合与优化。 用OLSF来选择控制器位置,根据OLSF将物理节点排序,选最大OLSF映射控制器。 将虚拟请求节点排序

(原創) 回讀者的信,一篇學習C#/C++/OO的FAQ (OO) (Design Pattern) (C/C++) (.NET) (C#)

会有一股神秘感。 提交于 2020-04-04 22:38:28
Abstract 因為我覺得這是很多人都會有的疑問,所以我將回復的內容公開出來和大家分享。 讀者Email內容 您好: 在拜讀了您在 " 博客園 " 的一些文章之後,有個問題想請教您,希望不會打擾到您。 從文章中得知您是從C#轉C++的,但是現在C#不是當紅炸子雞嗎? 怎麼會想轉學C++呢? 學習C#是不是要打好C++的基礎呢? 蠻多文章對我而言有點深度,看來我要再加把勁才行了。 我的回信 你好 >>從文章中得知您是從C#轉C++的,但是現在C#不是當紅炸子雞嗎? 怎麼會想轉學C++呢? C#和C++專屬不同的領域 井水不犯河水 如網頁、商用軟件、資料庫這些,本來就該用C#寫,也不該用C++寫。 但是OS、Driver、嵌入式系統、Game、3D、影像處理這些領域C#也無法搶,因為C#的無法寫底層的OS、Driver、嵌入式系統,速度也無法達到Game、3D的需求。 舉個例子來說,你看過Microsoft哪個軟體用C#寫嗎? XP、Vista、Office、SQL Server,就連C# compiler也是C++寫出來的,這也是微軟被很多人批評的一個地方,大力鼓吹C#,自己卻從來沒有軟體用C#,除了微軟的網站用ASP.NET且用C#寫外。 所以其實我C#和C++都很喜歡,若以語法來說,C#乾淨很多,也穩定許多,大部分程式,若和速度牽涉不大,且記憶體可以接受,我會用C#寫

接口继承和实现继承

纵饮孤独 提交于 2020-04-03 04:29:29
设计类(class)的时候,你可能会干下面这几件事情: 1.只让继承类(derived class)继承成员函数的接口; 2.让derived class同时继承函数的接口和实现,但又能覆写所继承的实现; 3.同时继承函数的接口和实现,但不允许覆写任何东西; 以下面的类为例,来解释上面的三种实现: class Shape { public: virtual void draw() const = 0; virtual void error(const std::string& msg); int objectID() const; ... }; class Rectangle: public Shape{...}; class Ellipse: public Shape{...}; 对于draw函数,其实我们是可以调用的:如下: Shape *ps = new Shpae;   //Error! Shape is abstract Shape *ps1 = new Rectangle;   //ok ps1->draw(); //call Rectangle::draw Shape *ps2 = new Ellipse; //ok ps2->draw(); //Ellipse::draw ps1->Shape::draw(); //Shape::draw ps2->Shpae:

C#中的virtual与override学习笔记(摘自MSDN)

断了今生、忘了曾经 提交于 2020-03-31 06:42:28
virtual(C# 参考) virtual 关键字用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象。例如,此方法可被任何继承它的类重写。 复制代码 public virtual double Area() { return x * y; } 虚拟成员的实现可由派生类中的 重写成员 更改。有关使用 virtual 关键字的更多信息,请参见 使用 Override 和 New 关键字进行版本控制(C# 编程指南) 和 了解何时使用 Override 和 New 关键字(C# 编程指南) 。 备注 调用虚方法时,将为重写成员检查该对象的运行时类型。将调用大部分派生类中的该重写成员,如果没有派生类重写该成员,则它可能是原始成员。 默认情况下,方法是非虚拟的。不能重写非虚方法。 virtual 修饰符不能与 static 、 abstract, private 或 override 修饰符一起使用。 除了声明和调用语法不同外,虚拟属性的行为与抽象方法一样。 在静态属性上使用 virtual 修饰符是错误的。 通过包括使用 override 修饰符的属性声明,可在派生类中重写虚拟继承属性。 示例 在该示例中, Dimensions 类包含 x 和 y 两个坐标和 Area() 虚方法。不同的形状类,如 Circle 、 Cylinder 和 Sphere 继承