在C ++中,是否可以在初始化时覆盖虚拟方法?

时间:2013-05-22 13:50:58

标签: c++ oop initialization

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

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

这可以用C ++做,如果有,那么语法是什么?

4 个答案:

答案 0 :(得分: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();
};

答案 1 :(得分:3)

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

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

答案 2 :(得分: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();
}

答案 3 :(得分:0)

首先,我们不能从抽象类声明一个对象,因此不可能。