标签: abstract-class

为什么我们不能声明一个std :: vector <AbstractClass>?

花了很长时间在C#中开发,我注意到如果为了将它用作接口而声明一个抽象类,则无法实例化该抽象类的向量来存储子类的实例.

#pragma once
#include <iostream>
#include <vector>

using namespace std;

class IFunnyInterface
{
public:
    virtual void IamFunny()  = 0;
};

class FunnyImpl: IFunnyInterface
{
public:
    virtual void IamFunny()
    {
        cout << "<INSERT JOKE HERE>";
    }
};

class FunnyContainer
{
private:
    std::vector <IFunnyInterface> funnyItems;
};
Run Code Online (Sandbox Code Playgroud)

声明抽象类向量的行在MS VS2005中导致此错误:

error C2259: 'IFunnyInterface' : cannot instantiate abstract class
Run Code Online (Sandbox Code Playgroud)

我看到一个明显的解决方法,即用以下内容替换IFunnyInterface:

class IFunnyInterface
{
public:
    virtual void IamFunny()
    {
        throw new std::exception("not implemented");
    }
};
Run Code Online (Sandbox Code Playgroud)

这是一个可接受的解决方案C++明智吗?如果没有,是否有像boost这样的第三方库可以帮我解决这个问题?

谢谢您阅读此篇 !

安东尼

c++ abstract-class stl

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

何时使用抽象类?

这是关于抽象类的MSDN文章,但我真的不明白......

我什么时候应该使用抽象类?使用抽象类有什么好处?

.net c# abstract-class

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

抽象类与接口与mixins

有人可以向我解释抽象类,接口mixins之间的区别吗?我之前在我的代码中使用了每个,但我不知道技术差异.

oop abstract-class terminology interface mixins

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

类映射错误:'T'必须是具有公共无参数构造函数的非抽象类型

虽然映射类我得到错误'T'必须是具有公共无参数构造函数的非抽象类型,以便在泛型类型或方法中将其用作参数'T'.

下面是我的SqlReaderBase类

 public abstract class SqlReaderBase<T> : ConnectionProvider
    {

        #region  Abstract Methods

        protected abstract string commandText { get; }
        protected abstract CommandType commandType { get; }
        protected abstract Collection<IDataParameter> GetParameters(IDbCommand command);
        **protected abstract MapperBase<T> GetMapper();**

        #endregion

        #region Non Abstract Methods

        /// <summary>
        /// Method to Execute Select Queries for Retrieveing List of Result
        /// </summary>
        /// <returns></returns>
        public Collection<T> ExecuteReader()
        {
            //Collection of Type on which Template is applied
            Collection<T> collection = new Collection<T>();

            // initializing connection
            using (IDbConnection connection …
Run Code Online (Sandbox Code Playgroud)

c# mapping abstract-class

66
推荐指数
3
解决办法
5万
查看次数

Java抽象类用泛型实现接口

我正在尝试定义一个实现Comparable的抽象类.当我使用以下定义定义类时:

public abstract class MyClass implements Comparable <MyClass>
Run Code Online (Sandbox Code Playgroud)

子类必须实现compareTo(MyClass object).相反,我希望每个子类都能实现compareTo(SubClass object),接受自己类型的对象.当我尝试使用以下内容定义抽象类时:

public abstract class MyClass implements Comparable <? extends MyClass>
Run Code Online (Sandbox Code Playgroud)

它抱怨说"超类型可能没有指定任何通配符".

有解决方案吗?

java generics abstract-class

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

Java 8中的抽象类和接口有什么区别?

在Java中,抽象类和接口之间曾经存在微妙但重要的区别:默认实现.抽象类可以拥有它们,接口却不能.Java 8虽然引入了接口的默认实现,但这意味着这不再是接口和抽象类之间的关键区别.

那是什么?

尽我所知,唯一剩下的差异(除了可能是引擎效率之外的东西)是抽象类遵循传统的Java单继承,而接口可以有多重继承(或者如果你愿意,可以有多个实现).这引出了另一个问题 -

新的Java 8接口如何避免钻石问题

java abstract-class interface diamond-problem java-8

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

抽象类是否应该具有serialVersionUID

在java中,如果一个类实现Serializable但是是抽象的,它是否应该声明一个longVersionUID,或者子类只需要它?

在这种情况下,确实意图是所有子类都处理序列化,因为该类型的目的是在RMI调用中使用.

java serialization abstract-class serialversionuid

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

在实例化派生类时,是否未隐式调用抽象类构造函数?

举个例子:

abstract class Base {
    function __construct() {
        echo 'Base __construct<br/>';
    }
}

class Child extends Base {
    function __construct() {
        echo 'Child __construct<br/>';
    }
}

$c = new Child();   
Run Code Online (Sandbox Code Playgroud)

来自C#背景,我希望输出为

Base __construct
Child __construct

但是,实际输出只是

孩子__construct

php abstract-class

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

从Abstract Class获取Concrete Class名称

如果已经提出这个问题,我道歉.我搜索了一些问题但找不到答案.

在Java中,我可以在抽象类中获取扩展它的具体类的实例吗?

如果是这样,我可以看一个代码示例吗?

java abstract-class

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

为什么我不能在抽象C#类上创建抽象构造函数?

我正在创建一个抽象类.我希望每个派生类都被强制实现构造函数的特定签名.因此,我做了我想做的事情,我想强制他们实现一个方法,我做了一个抽象的方法.

public abstract class A
{
    abstract A(int a, int b);
}
Run Code Online (Sandbox Code Playgroud)

但是我收到一条消息,说明这个项目的抽象修饰符无效.我的目标是强制这样的代码.

public class B : A
{
    public B(int a, int b) : base(a, b)
    {
        //Some other awesome code.
    }
}
Run Code Online (Sandbox Code Playgroud)

这是所有C#.NET代码.谁能帮我吗?

更新1

我想补充一些东西.我最终得到的是这个.

private A() { }

protected A(int a, int b)
{
    //Code
}
Run Code Online (Sandbox Code Playgroud)

这就是一些人所说的,默认是私有的,并且类需要实现构造函数.但是,这不会强制带有签名A(int a,int b)的构造函数.

public abstract class A
{
    protected abstract A(int a, int b)
    {


    }
}
Run Code Online (Sandbox Code Playgroud)

更新2

我应该清楚,为了解决这个问题,我将默认构造函数设为私有,并保护我的其他构造函数.我并不是在寻找一种让我的代码工作的方法.我照顾好了.我想了解为什么C#不允许你这样做.

c# oop inheritance constructor abstract-class

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