我在创建新类对象时遇到了问题。
这个抽象类叫做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/