新派生 class 来自抽象 classes

New derived class from abstract classes

我在创建新的 class 对象时遇到问题。

抽象 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' 分配给新队列的地方,其中队列是派生的 class。

SimpleList<int> *pQLi;

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

}

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

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

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

就这么简单。使你的基础 class getName() virtual 如下。由于您关心指针的内容,因此需要对象的后期绑定。

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

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

但是,我不明白,为什么你需要一个模板 class。您没有在任何地方使用 type(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;
}