我遇到了创建新类对象的问题。
抽象类称为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,而是出现一个空白字符
答案 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;
}