我从C#多态性的MSDN资源中选取了这段代码。
public class A
{
public virtual void DoWork() { }
}
public class B : A
{
public override void DoWork() { }
}
public class C : B
{
public override void DoWork()
{
// Call DoWork on B to get B's behavior:
base.DoWork();
// DoWork be
在C#中,如果A实现IX,而B继承自A,那么B是否必然实现IX?如果是,是不是因为LSP?以下各项之间是否有区别:
1.
Interface IX;
Class A : IX;
Class B : A;
和
2.
Interface IX;
Class A : IX;
Class B : A, IX;
?
有没有一个与B通过继承链实现IX或B直接实现IX相关的术语?
PS:我假设在这两种情况下接口都是隐式实现的,而不是显式实现的。有没有在1上使用的模式,如果它们像在2中一样实现,就不能工作?
我喜欢在几个类中定义良好的接口,为此,我在一个抽象类中创建了纯虚函数,每个类都需要实现。
但我面临的问题是,我可以实例化这些类,因此我必须创建另一个继承接口类的类,而所有其他类都需要继承这个基类。下面是示例代码:
界面
class Interface
{
virtual std::string getName() = 0;
}
class Base : public Interface
{
virtual std::string getName(return std::string("Base") ;)
}
class A : public Base
{
第一次发帖,所以请温文点!
我有一个像这样的界面
public interface I_Hospital{
public void registerObserver(I_Person p);
public void removeObserver(I_Person p);
public void notifyObservers();
public void addWard(Ward ward);
}
现在,如果我想在C++中重新创建它,执行以下操作是否正确:
IHospital.h
Class IHospital{
public:
virtual
关于c++中接口类的表达式,我有以下问题;
到目前为止,我所学到的是,如果我们想要在c+中创建界面,我们可以使用一个纯虚函数,例如
class A_Interface {
// pure virtual function
virtual std::string helloWorld() = 0;
};
这个问题在这里已经被回答了很多次了。
然而,如果我们有一个复杂的多重继承级别,比如
A : A_Interface
B : A
C : B
D : C
等。
有时,我们不希望覆盖所有子类中完全相同的纯虚方法,因为基类实现就足够了。此外,这是非常困难和非常耗时的,特别是
(我对C++非常陌生,所以希望这只是一个新手的错误)
我在我的代码中遇到了问题,我有一个"Player“类,它需要一些属性,我试图通过使用抽象类来给它提供这些属性:
//player.h
class Player : public IUpdate, public IPositionable, public IMoveable, public IDrawable
{
public:
Player(void);
SDL_Rect get_position();
void move(Uint32 dTime);
void update(Uint32 dTim
嗨,我得到了下面的错误,我真的不确定为什么。
class InteSiVis: public ofBaseApp //{
, public ofxMidiListener{
当我让类inresivis继承自ofxMidiListener类,并且在主源文件中得到以下错误时,就会发生这种情况
int main( ){
ofSetupOpenGL(1920,1080, OF_WINDOW);
ofRunApp( new InteSiVis()); // <-------- The error is here Allocating object of type abst
假设我有一个基类A和三个来自A的派生类,分别称为x、y和z类。现在,类x有一个函数成员f,我想通过多态性从类A指针访问它。
我知道我还必须在A类中定义相应的虚函数,否则,我会得到类似"class A has no member named f"的错误。但是,如果我在A中定义虚函数,我还需要在y和z中定义f,否则会引发一个错误,指出"y and z are of abstract class type"会被抛出。但有时,f就像一个仅与x类相关的特征函数,在y和z类中定义没有任何意义,尽管我可以用y和z编写它,但不提供任何内容。
我的问题是在上面的场景中,我应该怎么
在我的项目中,我发现了一个奇怪的情况,这在C#中似乎完全有效,因为我没有编译时错误。
简化后的示例如下:
using System;
using System.Collections.Generic;
namespace Test
{
interface IFoo
{
void FooMethod();
}
class A
{
public void FooMethod()
{
Console.WriteLine("implementation");
毫无疑问,装饰器模式是增强类中某些不能(或不应该)继承旧方法的方法的很好且简单的标准,就像C#中的这个例子(我没有使用接口(我应该)来使其尽可能简短)。
using System;
class Human { ... }
class Father {
public string Info() {
return "John";
}
}
class Son : Human { // decorating Father
Father f = new Father();
public string Info() {
我想在C++项目中实现我在引擎(Unity3D)中看到的行为。
以下代码使用C# (Unity的语言)编写:
using UnityEngine;
using System.Collections;
public class example : MonoBehaviour {
void Update() {
//Update is called every frame
}
}
因为我不能访问更新源代码,所以我只能猜测MonoBehavior ()是一个虚拟函数,可以像这样实现。
我想在C++中复制相同的行为。在main()中有一个循环,一个超级对象将在该循环