标签: abstract-class

函数定义的纯粹说明符

在GCC上编译时,我得到错误:函数定义上的纯指定符,但是当我使用VS2005编译相同的代码时却没有.

class Dummy {   
  //error: pure-specifier on function-definition, VS2005 compiles 
  virtual void Process() = 0 {};
};
Run Code Online (Sandbox Code Playgroud)

但是当这个纯虚函数的定义不是内联时,它的工作原理是:

class Dummy
{
  virtual void Process() = 0;
};
void Dummy::Process()
{} //compiles on both GCC and VS2005
Run Code Online (Sandbox Code Playgroud)

错误意味着什么?为什么我不能内联?如第二个代码示例所示,避免编译问题是否合法?

c++ abstract-class pure-virtual

34
推荐指数
3
解决办法
1万
查看次数

如何以及何时使用抽象类

这是我在Java中的测试程序.我想知道抽象类在这里有多重要,为什么我们为此使用抽象类.

它是强制性的还是最好的方法; 如果是这样的话?

class Shape1 {
    int i = 1;
    void draw() {
        System.out.println("this is shape:" + i);
    }
}

class Shape2 {
    int i = 4;
    void draw() {
        System.out.println("this is shape2:" + i);
    }
}


class Shape {
    public static void main(String args[]) {
        Shape1 s1 = new Shape1();
        s1.draw();

        Shape2 s2 = new Shape2();
        s2.draw();
    }
}
Run Code Online (Sandbox Code Playgroud)

java oop abstract-class

34
推荐指数
5
解决办法
9万
查看次数

接口和抽象类继承,扩展类中的实现

在我看过的每个例子中,扩展类都实现了父类的接口.供参考,以下示例:

interface MyInterface{
    public function foo();
    public function bar();
}

abstract class MyAbstract implements MyInterface{
    public function foo(){ /* stuff */ }
    public function bar(){ /* stuff */ }
}

// what i usually see
class MyClass extends MyAbstract implements MyInterface{}

// what i'm curious about
class MyOtherClass extends MyAbstract{}
Run Code Online (Sandbox Code Playgroud)

是否未能在子级中实现接口,这是由父级实现的,被视为不良做法或其他什么?省略孩子的实施是否有任何技术缺陷?

php inheritance abstract-class interface

34
推荐指数
3
解决办法
2万
查看次数

何时使用接口或抽象类?何时使用?

虽然某些指导原则指出,当你想为继承不是明确的类定义合同时应该使用接口(IDomesticated),当类是另一个(Cat : Mammal,Snake : Reptile)的扩展时继承,有些情况(在我看来)这些准则进入灰色地带.

例如,说我的实施是Cat : Pet.Pet是一个抽象类.应该说是扩大到Cat : Mammal, IDomesticated那里Mammal是一个抽象类,IDomesticated是接口?或者我是否与KISS/YAGNI原则相冲突(尽管我不确定Wolf将来是否会有一个课程,但是无法继承Pet)?

远离隐喻Cats和Pets,假设我有一些表示传入数据源的类.他们都需要以某种方式实现相同的基础.我可以在抽象Source类中实现一些通用代码并从中继承.我也可以创建一个ISource接口(对我来说感觉更"正确")并在每个类中重新实现通用代码(这不太直观).最后,通过制作抽象类和界面,我可以"吃蛋糕并吃掉它".什么是最好的?

这两种情况提出了仅使用抽象类,只使用接口并同时使用抽象类和接口的要点.这些都是有效的选择,还是存在"规则",以便何时应该使用另一个?


我想通过"同时使用抽象类和接口"来澄清,当它们基本上表示相同的事物(Source并且ISource两者都具有相同的成员)时,包括这种情况,但是类在接口指定合同时添加了通用功能.

另外值得注意的是,这个问题主要针对不支持多重继承的语言(例如.NET和Java).

oop abstract-class interface

33
推荐指数
3
解决办法
4万
查看次数

具有Traits的Scala客户端组合与实现抽象类

我已经阅读过Scala,通常建议使用Traits而不是Abstract类来扩展基类.

以下是一个很好的设计模式和布局吗?这是Traits如何取代Abstract?

  • 客户端类(使用def function1)
  • trait1类(覆盖function1)
  • trait2类(覆盖function1)
  • specificClient1使用trait1扩展客户端
  • specificClient2使用trait2扩展客户端

abstract-class scala traits abstract

33
推荐指数
1
解决办法
2577
查看次数

C#中的虚拟/抽象字段

是否可以在C#类中拥有虚拟/抽象字段?如果是这样,它是如何完成的?

.net c# oop abstract-class

32
推荐指数
4
解决办法
4万
查看次数

抽象类vs私有构造函数

我有一个只有静态方法和字段的java类,所以我不希望为此创建任何对象.我可以通过两种方式实现这一点,

  1. 使班级abstarct.
  2. 使用私有构造函数.

哪两个更好的方式?

java abstract-class private-constructor

32
推荐指数
1
解决办法
4554
查看次数

Visual Studio设计器中的抽象UserControl继承

abstract class CustomControl : UserControl 
{
    protected abstract int DoStuff();
}

class DetailControl : CustomControl
{
    protected override int DoStuff()
    { 
        // do stuff
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

我在表单中删除了一个DetailControl.它在运行时正确呈现,但设计器显示错误并且无法打开,因为基本用户控件是抽象的.

目前,我正在考虑以下补丁,这对我来说似乎很不对,因为我希望子类被强制实现该方法.

class CustomControl : UserControl 
{
    protected virtual int DoStuff()
    {
        throw new InvalidOperationException("This method must be overriden.");
    }
}

class DetailControl : CustomControl
{
    protected override int DoStuff()
    { 
        // do stuff
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

任何人都有更好的想法如何解决这个问题?

c# user-controls abstract-class winforms

31
推荐指数
3
解决办法
2万
查看次数

使用抽象方法有什么意义?

使用"抽象方法"有什么意义?抽象类无法实例化,但抽象方法呢?他们只是在这里说"你必须实现我",如果我们忘记它们,编译器会抛出错误吗?

这是否意味着别的什么?我还读到了一些关于"我们不必重写相同代码"的内容,但在抽象类中,我们只"声明"抽象方法,因此我们必须重写子类中的代码.

你能帮我理解一下吗?我检查了关于"抽象类/方法"的其他主题,但我没有找到答案.

java abstract-class

31
推荐指数
3
解决办法
2万
查看次数

Kotlin:为什么要使用抽象类(与接口相比)?

我知道Kotlin中抽象类和接口之间的两个区别:

  • 抽象类可以有状态(例如var......)
  • 一个类可以实现多个接口,但不能实现多个抽象类.

由于Kotlin是一种相当新鲜的语言,我想知道为什么抽象类没有被抛弃?接口似乎是优秀的工具,对Abstract Classes的需求很少.

详细说明:Kotlin确实支持接口中的具体功能实现,例如:

interface Shiny {

    fun shine(amount : Int)  // abstract function

    fun reflect(s : String) { print ("**$s**") }  // concrete function

}
Run Code Online (Sandbox Code Playgroud)

有人能提供一个强有力的实例来说明抽象类的需求吗?

abstract-class kotlin

31
推荐指数
2
解决办法
4619
查看次数