2014-10-27 72 views
-1
//abstract product 
class AbstractProduct 
{ 
public: 
    virtual void diplay(void) = 0; 
}; 
//concrete product 
class Histogram : public AbstractProduct 
{ 
public: 
    Histogram() 
    { 
     cout << "default construct a Histogram!" << endl; 
    } 
    void display(void) 
    { 
     cout << "Display Histogram!" << endl; 
    } 
}; 
//factury class 
class Factury 
{ 
public: 
    static AbstractProduct* getProduct(string type) 
    { 
     AbstractProduct* absP; 
     if(type=="Histogram") 
     { 
      Histogram his;// error, Variable type "Histogram" is an abstract class 
     } 
     return absP; 
    } 
}; 

我已经实现纯虚函数,但它仍然说我的派生类是一个抽象类。我不知道为什么。为什么我的派生类是一个抽象类? C++

+0

你能告诉我们的编译错误?它通常说什么是错的。 – matsjoyce 2014-10-27 09:54:17

+2

你有一个错字:'diplay'是不一样'display'。 – juanchopanza 2014-10-27 09:58:18

+0

使用'override'关键字可能有助于排除错字。 – Jarod42 2014-10-27 10:08:21

回答

4

的问题是,这些功能

virtual void diplay(void) = 0; 

void display(void) 
{ 
    cout << "Display Histogram!" << endl; 
} 

有不同的名称。我认为这只是一个错字。

考虑到这种静电功能

static AbstractProduct* getProduct(string type) 
{ 
    AbstractProduct* absP; 
    if(type=="Histogram") 
    { 
     Histogram his;// error, Variable type "Histogram" is an abstract class 
    } 
    return absP; 
} 

也没有意义,因为它返回未初始化的指针absP

+0

完美:),这应该是问题。 – Nik 2014-10-27 09:58:56

0

如果这真的是你的代码中有一个错字

virtual void diplay(void) = 0; 

void display(void) 
相关问题