来自抽象类的新派生类

时间:2018-04-03 04:25:33

标签: c++ abstract-class derived-class

我遇到了创建新类对象的问题。

抽象类称为SimpleList,目前它本身不做任何事情。

template<class T>
class SimpleList {

public:
    string ListName;    

    SimpleList(){
    };
    string getName(){
        return ListName;
    };
};

template<class T> 
class Queue : public SimpleList<T> {

public:
    string ListName;    

    Queue(string& name){
        ListName = name;
    }   

    string getName(){
        return ListName;
    }
};

这是我试图将'pQLi'分配给新队列的地方,其中Queue是派生类。

SimpleList<int> *pQLi;

if (indicator == 'i' ){
    pQLi = new Queue<int>(name1);

}

但无论我做什么来打印出队列之外的pQLi的名称(或从中访问任何数据,但在最简单的情况下),只有''出现。例如,如果我这样做

cout <<(*pQLi).getName() <<"\n";

不是打印出ListName,而是出现一个空白字符

1 个答案:

答案 0 :(得分:2)

它很简单。使您的基类getName()virtual如下所示。由于您关注指针的内容,因此需要对象的后期绑定。

template<class T>
class SimpleList
{
public:
    string ListName;

    SimpleList() = default;
    virtual string getName(){
        return ListName;
    };
};

但是,我不明白,为什么你需要一个模板类。你没有在任何地方使用过类型(T)。 并尝试尽可能使用initializer_list,智能指针适用于以下情况。我做了如下的小修正。希望这已经回答了你的问题。

#include <iostream>

template<class T>
class SimpleList
{
private:
    std::string ListName;
public:
    SimpleList() = default;
    virtual ~SimpleList(){}
    virtual const std::string& getName()const
    {   return ListName;    };
};

template<class T>
class Queue : public SimpleList<T>
{
private:
    std::string ListName;
public:
    Queue(const std::string& name)
        :ListName(name) {}

    const std::string& getName()const
    {   return ListName;    }
};

int main()
{
    SimpleList<int> *pQLi;

    char indicator = 'i';
    std::string name1 = "nothing";

    if (indicator == 'i' ){
    pQLi = new Queue<int>(name1);}

    std::cout <<(*pQLi).getName() <<"\n";

    delete pQLi;
    pQLi = nullptr;
    return 0;
}