2

当我编写 java 时,可以在初始化类时覆盖抽象方法。我认为它看起来像这样:

AbstractClass object = new AbstractClass(){
   void inheritedMethod(){
      ...
   }
};

这是否可以在 C++ 中实现,如果可以,语法是什么?

4

4 回答 4

5

当您在 Java 中执行此操作时,您正在创建一个具体的类,该类在本地定义,没有名称。

您可以在 C++ 中使用本地类定义和变量声明来接近这一点。

    class Concrete : public AbstractClass {
        public:
        void inheritedMethod() {
            cout<<"inherited method";
        }
    } object;

例如,在上下文中:

class AbstractClass {
public:
    virtual void inheritedMethod() =0;
};

void bar() {
    class Concrete : public AbstractClass {
        public:
        void inheritedMethod() {
            cout<<"inherited method";
        }
    } object;

    object.inheritedMethod();
};
于 2013-05-22T14:15:29.080 回答
3

你不能。您必须派生一个子类并实现纯虚方法,然后创建一个对象。

但是你可以通过 lambda 函数来模拟一些东西:

class AbstractClass
{
public:
    AbstractClass(std::function<void()> func_) : func(std::move(func_)) {}

    const std::function<void()> func;
};

int main()
{
    AbstractClass object([]()
    {
        // the code
    });

    object.func();
}
于 2013-05-22T13:56:17.507 回答
3

不,这是不可能的,C++ 不允许这样做。

您首先必须定义一个新的、独立的类,该类继承自AbstractClass该类并实例化该类。

于 2013-05-22T13:52:18.473 回答
1

首先,我们不能从抽象类中声明一个对象,所以这是不可能的。

于 2013-05-22T13:53:36.210 回答