c++ - 来自抽象类的新派生类

标签 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”分配给新队列的地方,其中队列是派生类。

SimpleList<int> *pQLi;

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

}

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

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

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

最佳答案

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

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

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

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

关于c++ - 来自抽象类的新派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49622247/

相关文章:

c++ - const 应该用于捕获错误还是用于文档?

c++ - 为什么我的嵌套类被视为抽象类?

c++ - 将基类作为参数传递给虚函数时避免 dynamic_cast

c++ - 如何从另一个类中的私有(private)指针指向的类中获取私有(private)信息?

c++ - 在C++嵌入式ASM中使用基本指针寄存器

c++ - 基于值与常量引用的函数重载

c++ - 运算符优先级与计算顺序

c# - 如何从抽象类访问函数而不使它们成为静态的?

C++ 为什么我的类仍然是抽象的?

c++ - 派生类析构函数如何在以下程序中被调用为私有(private)的?