新派生 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;
}
我在创建新的 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;
}