抽象类和对象

Abstract class and object

本文关键字:对象 抽象类      更新时间:2023-10-16

我得了头等课:

namespace Abstract{
    class AbstractClass{
    public:
        virtual void setName(const std::string & _name) =0;
        virtual void print() =0;
        void DynamicCastTest(){};
    };
}

和第二个:

class ConcreteClass : public Abstract::AbstractClass{
std::string type;
public:
    ConcreteClass();
    ConcreteClass(char* a);
    ~ConcreteClass();
    static ConcreteClass* CreateConcreteClass(char* a);
    virtual void setName(const std::string & _name); 
    virtual void print(); 
};

但是当我想定义我的函数CreateConcreteClass(char*):

static ConcreteClass* CreateConcreteClass(char* a){
    ConcreteClass a;
}

Visual不能创建对象'a',因为它告诉我它是一个抽象对象。

为什么?

我已经用VC10尝试过了。它给了我错误C2082告诉我像正式参数a的重新定义(我有一个德国安装,所以你的错误信息可能不同)。只需重命名变量:

ConcreteClass* ConcreteClass::CreateConcreteClass(char* a)
{
    return new ConcreteClass(a); 
}

编辑:为不返回临时

地址添加static

第二次编辑:使CreateConcreteClass为静态工厂函数